我正在尝试将书签添加到现有表格中的单元格,并希望在单独的页面中创建超链接。
我已经看过有关如何创建书签和超链接的教程,但仅限于此处运行: 如何在Word文档中创建书签,然后使用Python创建指向书签的内部超链接
下面是我的代码,运行时成功创建了文件。但是当我打开文件时无法打开,因为它给出了错误。
但不确定我的代码是否正确。我从互联网上抓取了它们,尝试哪一个可行。如果有人能指出正确的方向,我们将不胜感激。刚刚开始学习 python 和一般编程
from docx import Document
from docx.oxml.ns import qn
from docx.oxml.shared import OxmlElement
document = Document("sample rows.docx")
table = document.tables[0]
rows = table.rows
xml_cell = rows[1].cells[0]._tc
start = OxmlElement('w:bookmarkStart')
start.set(qn('w:id'), 'row1')
start.set(qn('w:name'), 'row1')
start.set(qn('w:colFirst'), '0')
start.set(qn('w:colLast'), '0')
xml_cell.append(start)
end = OxmlElement('w:bookmarkEnd')
end.set(qn('w:id'), 'row1')
end.set(qn('w:name'), 'row1')
xml_cell.append(end)
# Adding new page and table
document.add_page_break()
new_table = document.add_table(1, 1)
cell = new_table.add_row().cells[0]
cell.text = "This is row 1 link"
c_tc = cell._tc
hyperlink = OxmlElement('w:hyperlink')
hyperlink.set(qn('w:anchor'), 'row1')
c_tc.append(hyperlink)
document.save("sample rows1.docx")
更新:我通过在单元格内提取它的形式来恢复在书签中使用运行,因为我无法找到将书签添加到单元格的解决方案。我还是把上面的问题提出来,希望有人解答。下面的代码对我有用(与上面的代码无关)。
def add_bookmark(self, run, title_id):
run_tag = run._r
# create start bookmark
start = OxmlElement('w:bookmarkStart')
start.set(qn('w:id'), f'{title_id}')
start.set(qn('w:name'), f'{title_id}')
run_tag.append(start)
text = OxmlElement('w:r')
text.text = ''
run_tag.append(text)
# create end bookmark
end = OxmlElement('w:bookmarkEnd')
end.set(qn('w:id'), f'{title_id}')
run_tag.append(end)
def add_hyperlink(self, title_id, paragraph):
hyperlink = OxmlElement('w:hyperlink')
hyperlink.set(qn('w:anchor'), f'{title_id}')
new_run = OxmlElement('w:r')
rPr = OxmlElement('w:rPr')
new_run.append(rPr)
new_run.text = f"<Title>"
hyperlink.append(new_run)
r = paragraph.add_run()
r._r.append(hyperlink)
r.font.name = "Calibri"
r.font.italic = True
r.font.color.theme_color = MSO_THEME_COLOR_INDEX.HYPERLINK
r.font.underline = True
请参阅文档 https://python-docx.readthedocs.io/en/latest/_modules/docx/table.html?highlight=._element。 如果你想创建一个链接到表格的单元格(0,0)。你可以创建一个链接到table.cell(0,0).paragraphs[0]。实际上单元格的内容也是一个块级对象(https://python-docx.readthedocs.io/en/latest/user/text.html),必须至少包含一个段落。