我使用python包 "python-docx "来修改MS word .docx文档的结构和内容。该软件包缺乏更新TOC(内容表)的可能性[ Python。用python-docx/lxml创建一个 "目录"。 .
是否有变通的办法来更新一个文件的TOC?我想过使用python软件包 "pywin32 "中的 "win32com.client"[ https://pypi.python.org/pypi/pypiwin32] 或为MS Office提供 "cli控制 "功能的类似的pypi软件包。
I tried the following:
我把 document.docx 改为 document.docm,并实现了以下的宏 [ http://word.tips.net/T000301_Updating_an_Entire_TOC_from_a_Macro.html] :
Sub update_TOC()
If ActiveDocument.TablesOfContents.Count = 1 Then _
ActiveDocument.TablesOfContents(1).Update
End Sub
如果我改变内容(添加/删除标题)并运行宏,TOC就会更新。我保存文件,我很高兴。
我实现了以下的Python代码,它应该等同于该宏。
import win32com.client
def update_toc(docx_file):
word = win32com.client.DispatchEx("Word.Application")
doc = word.Documents.Open(docx_file)
toc_count = doc.TablesOfContents.Count
if toc_count == 1:
toc = doc.TablesOfContents(1)
toc.Update
print('TOC should have been updated.')
else:
print('TOC has not been updated for sure...')
update_toc(docx_file)在一个更高层次的脚本中被调用(该脚本操作文档中与TOC相关的内容)。在这个函数调用之后,文档被保存(doc.Save()),关闭(doc.Close()),单词实例被关闭(word.Quit())。然而,TOC并没有被更新。
在执行宏之后,MS Word是否会执行我没有考虑到的其他动作?