最近在做一个数据分析项目,涉及到生成word文档。py在操作word这一块使用的是python-docx,但是我看了官方文档,发现这个模块并不能生成目录。在查了一些资料后发现win32com能够解决这个问题
使用win32com生成word目录需要搭配微软的.Net api使用,地址:(https://docs.microsoft.com/zh-cn/office/vba/api/word.document)
代码:
def update_toc(docx_file): # word路径
word = win32com.client.DispatchEx("Word.Application")
word.Visible = 0 # 设置应用可见
word.DisplayAlerts = 0
doc = word.Documents.Open(docx_file) # 使用微软office打开word
toc_count = doc.TablesOfContents.Count # 判断是否有无目录,如果数量是1则代表已经有目录了
if toc_count == 0:
for i, p in enumerate(doc.Paragraphs): # 遍历word中的内容
if '目录' in p.Range.Text: # 用于指定目录页面,看下面提示
p.Range.InsertParagraphAfter() # 添加新的段落
p.Range.InsertAfter("---")
parag_range = doc.Paragraphs(i+2).Range
doc.TablesOfContents.Add(Range=parag_range,
UseHeadingStyles=True,
LowerHeadingLevel=2) # 生成目录对象
elif toc_count == 1:
toc = doc.TablesOfContents(1)
toc.Update()
doc.Close(SaveChanges=True)
word.Quit()
提示:我用了一个死方法来用于指定目录生成页面,在使用docx模块生成文档的时候,在指定页面document.add_page_break()
打开一个空白页,并在这个页面加入目录两个字就好了