如何在Python中向表格单元格添加书签和超链接

问题描述 投票:0回答:1

我正在尝试将书签添加到现有表格中的单元格,并希望在单独的页面中创建超链接。

我已经看过有关如何创建书签和超链接的教程,但仅限于此处运行: 如何在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
python xml hyperlink docx bookmarks
1个回答
0
投票

请参阅文档 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),必须至少包含一个段落。

© www.soinside.com 2019 - 2024. All rights reserved.