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