python使用win32com生成word文档目录

 自动给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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值