admin 管理员组文章数量: 887021
自动给word文档生成目录并设置样式
from win32com import client
from win32com.client import constants
def create_auto_toc(file):
"""生成目录"""
word = client.DispatchEx("Word.Application")
word.Visible = 0 # 设置应用可见
word.DisplayAlerts = 0
doc = word.Documents.Open(file) # 使用微软office打开word
# 插入页眉横线
header = doc.Sections(1).Headers(constants.wdHeaderFooterPrimary)
# header.Range.ParagraphFormat.Alignment = constants.wdAlignParagraphCenter
header.Range.Borders(constants.wdBorderBottom).LineStyle = constants.wdLineStyleSingle
doc.Range(Start=0, End=0).InsertBreak()
doc.Range(Start=0, End=0).InsertParagraphBefore() # 在首行之前插入一行,用于插入目录
FirstLineRange = doc.Paragraphs(1).Range # 指向新插入的行
FirstLineRange.Text = '目录'
FirstLineRange.Font.Bold = True
FirstLineRange.Font.Size = 20
FirstLineRange.Font.Name = '仿宋'
FirstLineRange.ParagraphFormat.Alignment = 1
FirstLineRange.InsertParagraphAfter()
SecondLineRange = doc.Paragraphs(2).Range
doc.TablesOfContents.Add(Range=SecondLineRange, UseHeadingStyles=False, LowerHeadingLevel=2) # 生成目录对象
# 获取目录对象
toc = doc.TablesOfContents(1)
# 生成完目录后,插入分页符
tocRange = toc.Range
tocRange.Collapse(0) # 将光标移到目录末尾
tocRange.InsertBreak() # 插入分页符(7 表示分页符类型)
# 删除下一页的空白段落
nextPageRange = doc.Range(tocRange.End, doc.Content.End)
if nextPageRange.Paragraphs.Count >= 1:
nextPageRange.Paragraphs(1).Range.Delete()
# 设置目录样式
for para in toc.Range.Paragraphs:
para.SpaceBefore = Pt(0)
para.SpaceAfter = Pt(0)
# 单倍行距
para.LineSpacingRule = 0
# 更新目录中的链接字段
# toc.Update() # 样式会失效,但链接是有效的
doc.SaveAs(file)
doc.Close(SaveChanges=False)
word.Quit()
本文标签: 文档 目录 python win32com Word
版权声明:本文标题:python使用win32com生成word文档目录 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726311498h934490.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论