私は、CSV出力ファイルとして取り込み、データを再フォーマットし、Python-DocXを使用してWord文書に挿入するPythonプロジェクトに取り組んでいます。すべてこれまでのところ素晴らしいですが、同じフィールド内の複数のハイパーリンクを使用すると、すべてのリンクがセットの最初のリンクを指すようになります。CSVフィールドと別のPython-DocX段落へのリンクの抽出
は現在、この問題を引き起こしているコードです:
p7 = document.add_paragraph()
hyperlink = add_hyperlink(p7, row['See Also'], str(row['See Also']))
あなたは空白の段落が初期化された後、ハイパーリンクが、それに割り当てられている見ることができるように。 row ['See Also']は、私が扱う必要があるリンクを含む行です。いくつかのエントリは単一のリンクを含み、いくつかは多くのエントリを含みます。
この(https://github.com/python-openxml/python-docx/issues/74)はPython-DOCXのための文書化方法ごとにハイパーリンクを追加する機能である:私はそれを行うには考え
def add_hyperlink(paragraph, url, text):
# This gets access to the document.xml.rels file and gets a new relation id value
part = paragraph.part
r_id = part.relate_to(
url, docx.opc.constants.RELATIONSHIP_TYPE.HYPERLINK,
is_external=True
)
# Create the w:hyperlink tag and add needed values
hyperlink = docx.oxml.shared.OxmlElement('w:hyperlink')
hyperlink.set(docx.oxml.shared.qn('r:id'), r_id,)
# Create a w:r element
new_run = docx.oxml.shared.OxmlElement('w:r')
# Create a new w:rPr element
rPr = docx.oxml.shared.OxmlElement('w:rPr')
# Join all the xml elements together add add the required text to the w:r element
new_run.append(rPr)
new_run.text = text
hyperlink.append(new_run)
paragraph._p.append(hyperlink)
return hyperlink
方法は、それぞれのハイパーリンクを反復処理するためのループを使用していましたそれぞれの段落にハイパーリンクがうまくいくはずです。私は以下を試みたが、これはちょうど正しく動作しないリンクの1000を作成します。
for x in row['See Also']:
p = document.add_paragraph()
hyperlink = add_hyperlink(p, row['See Also'], row['See Also'])
次のように私は、現在のデータのちょうど2つのセットで非常に小さいCSVファイルを使用してテストしている:もちろん
https://www.openssl.org/blog/blog/2016/08/24/sweet32/
これは何の問題は生じないと予想されるとして、ハイパーリンクは動作しますが、しかし、次のようすべてのリンクが最初のアドレスを指すようにします。
https://downloads.avaya.com/elmodocs2/security/ASA-2006-217.htm
http://www.kb.cert.org/vuls/id/JARL-5ZQR4D
http://www-01.ibm.com/support/docview.wss?uid=isg1IY55949
http://www-01.ibm.com/support/docview.wss?uid=isg1IY55950
http://www-01.ibm.com/support/docview.wss?uid=isg1IY62006
http://www.juniper.net/support/security/alerts/niscc-236929.txt
http://technet.microsoft.com/en-us/security/bulletin/ms05-019
http://technet.microsoft.com/en-us/security/bulletin/ms06-064
http://www.kb.cert.org/vuls/id/JARL-5YGQ9G
http://www.kb.cert.org/vuls/id/JARL-5ZQR7H
http://www.kb.cert.org/vuls/id/JARL-5YGQAJ
http://www.nessus.org/u?cf64c2ca
https://isc.sans.edu/diary.html?date=2004-04-20
修正は、この問題を持つ任意の助けをいただければ幸いです、おそらく非常に単純です。
私が現在使っているのと同じ方法ですが、現在は入力として使用するCSVファイルからいくつかの行を投稿するために使用しています。問題は、[参照]行が複数行になっている場合があるため、リスト内のすべての後続リンクのハイパーリンクとして最初の項目を適用していることが原因と考えられます。[ '参照'] \t \tリンク=行リンク内のアイテムの分割( "の\ n") \t \t:csv_rowsにおける行の : –
私は次のコードで、今問題を修正している。 \tを\t \t p = document.add_paragraph() \t \t \tハイパーリンク= add_hyperlink(p、item、item) –