Python在生成word文档时,如何实现完整的目录功能?

需求描述:Python生成word文档,实现完整的目录功能
要求:1.方案在Linux环境适用(例如所用到的库)
2.打开文档自动显示目录内容,如下图案例所示
打开文档自动显示的目录内容
3.右键点击目录可以更新目录域

已做尝试:
方案1、考虑到要更新目录域,选择python-docx库,发现可以实现右键点击目录,更新目录域的功能,但是打开文档时目录页是空白的;(即打开文档目录没有显示内容,不满足要求2);目前使用python-docx库还未找到打开文档自动显示目录内容的方法
方案2、考虑选择其他生成word文档的库,发现除了python-docx库之外,其它库都是给模板自动插入数据来生成word文档(例如:python-docx-template),并不能实现更新目录域的功能
我认为比较棘手,下面我给出我使用 方案1 时的更新目录域调用的函数:
def add_table_of_contents(para_after_catalog):
“””生成word文档的目录域”””

创建目录域段落

new_paragraph = para_after_catalog.insert_paragraph_before()
p_element = new_paragraph._p

创建段落属性并设置为脏状态

pPr_element = OxmlElement(“w:pPr”)
dirty_prop = OxmlElement(“w:updateFields”)
dirty_prop.set(qn(“w:val”), “true”)
pPr_element.append(dirty_prop)
p_element.insert(0, pPr_element)

生成目录域

run = new_paragraph.add_run()

fldChar = OxmlElement(“w:fldChar”)
fldChar.set(qn(“w:fldCharType”), “begin”)

instrText = OxmlElement(“w:instrText”)
instrText.set(qn(“xml:space”), “preserve”)
instrText.text = ‘TOC \o “1-3” \h \z \u’
fldChar2 = OxmlElement(“w:fldChar”)
fldChar2.set(qn(“w:fldCharType”), “separate”)
fldChar3 = OxmlElement(“w:t”)
fldChar3.text = “”
fldChar4 = OxmlElement(“w:fldChar”)
fldChar4.set(qn(“w:fldCharType”), “end”)
r_element = run._r
r_element.append(fldChar)
r_element.append(instrText)
r_element.append(fldChar2)
r_element.append(fldChar3)
r_element.append(fldChar4)
return new_paragraph, fldChar3, r_element

欢迎大家交流解决方案,感谢!!

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!