python在word中插入目录和更新目录
1、插入目录
需要用到对象:TablesOfContents
目录的集合对象是TablesOfContents,单个的对象是TableOfContents。这两个词看起来差不多,差别只在table的复数和单数的区别,当时看了很久才看出差别。
现在创建一个空白的文档,在文档中添加一级标题和二级标题,最后在文档最前面,插入生成的目录。
示例代码:
import win32com.client as win32
from win32com.client import constants
doc_app = win32.gencache.EnsureDispatch('Word.Application')
doc_app.Visible =1 #不设置的话,看不到应用程序界面
doc = doc_app.Documents.Add()
#添加标题1
##添加文字
parag = doc.Paragraphs.Add()
parag_range = parag.Range
parag_range.Text ='一级标题'
###设置样式
parag_range.Style = doc.Styles("标题 1")#Heading 1 是样式的名称
border = parag.Borders(constants.wdBorderBottom)
border.LineStyle = constants.wdLineStyleSingle
border.LineWidth = constants.wdLineWidth225pt
#添加标题2
parag_range.InsertParagraphAfter()#在当前位置之后,新插入一行
parag_range = parag.Range
parag_range.Text ='二级标题'
parag_range.Style = doc.Styles("标题 2")#二级标题
##添加正文
parag_range.InsertParagraphAfter()
parag_range = parag.Range
parag_range.Text ='正文'
parag_range.Style = doc.Styles("正文")#正文
##插入目录
doc.Paragraphs(1).Range.InsertParagraphBefore()#在首行之前插入一行,用于插入目录
parag_range = doc.Paragraphs(1).Range#指向新插入的行
#插入目录
##从当前指向的位置插入目录,使用默认样式设置目录样式,包含3级标题
doc.TablesOfContents.Add(Range=parag_range, UseHeadingStyles=True,LowerHeadingLevel=3, UseHyperlinks=True)
上述代码中,除了最后一行,其他的都是在填充word的内容。真正插入代码的功能,只有最后一行代码。
UseHeadingStyles:设置使用默认的style
UseHyperlinks: 设置为Ture,则目录自带超链接。默认是False。
LowerHeadingLevel:设置目录显示的最低层级。通常UpperHeadingLevel不用设置。
生成效果:
对于文章中的段落的格式,例如间距、字体都可以通过手动设置在一个空白的word文档。这个文档作为模板,自动生成的内容,可以直接使用其样式,这样效率更高。
2、更新目录
日常工作中经常还会遇到需要更新目录。
可以使用2种更新方法:全部更新(Update)和只更新页码(UpdatePageNumbers)
只更新页码的示例代码:
for toc in doc.TablesOfContents: #遍历所有的目录对象
toc.UpdatePageNumbers() # 更新页码
示例中,是遍历所有的目录对象。如果需要针对特定的目录更新,可以使用doc.TablesOfContents(1)来制定首个目录,注意括号中的数字是从1开始的。
作者:flashman911