Python批量修改word文档的格式,并转换成pdf

昨天女朋友告诉我她遇到了一个比较复杂的难题,需要对七十多篇文档统一改格式,改的很简单就是文件太多,然后保存为pdf,每个文档都有好多页,可能手动改得改一天。听了之后,我突然萌生了给写个程序帮她改的想法。说干就干。后面会把程序贴出来,并记录下遇到的问题。

首先是导入模块:

import win32com
from win32com.client import Dispatch
import glob

然后开启一个进程:

w = win32com.client.Dispatch('kwps.Application') # 可能会报错
w.Visible = 0
w.DisplayAlerts = 0

刚开始我使用的是“Word.Application”,结果报错pywintypes.com_error: (-2147221005, '无效的类字符串', None, None),查了一些资料,说是改成“wps.Application”或者“kwps.Application”,改了之后果然成功了。仔细想来,原理应该是开一个文档处理程序(office或wps)的线程进行处理,因为我电脑没有装office,所以失败了。wps和kwps的区别是你电脑上转wps的版本。

接下来就是处理的程序:

def process():
    filenames = glob.glob(root + '\*.doc')
    for filename in filenames:
        print(filename)
        doc = w.Documents.Open(FileName=filename)
        # # 文档最开始插入文字,这里是插入文档的名字
        # insert = filename.split('.')[0] + '\n'
        # myRange = doc.Range(0, 0)
        # myRange.InsertBefore(insert)

        par = doc.Range(10, doc.Content.End)
        par.ParagraphFormat.LineSpacing = 12

        w.ActiveDocument.Select()
        w.Selection.Font.Name = "微软雅黑"
        w.Selection.Font.Size = "12"
        # 删除空行,这里数量是1,因为回车占一个字符
        for each in w.ActiveDocument.Paragraphs:
            if each.Range.Words.Count == 1:
                each.Range.Delete()
        print("已处理:" + filename)
        # 保存为PDF
        pdf_name = filename.split('.')[0]
        doc.SaveAs(pdf_name, FileFormat=17)
        doc.Close()
    print("处理完毕!")

运行完成之后,在目录里生成对应的PDF文件了,每个文件名都跟之前的相对应。

完整代码如下:

import win32com
from win32com.client import Dispatch
import glob

w = win32com.client.Dispatch('kwps.Application')
w.Visible = 0
w.DisplayAlerts = 0

def process():
    filenames = glob.glob(root + '\*.doc')
    for filename in filenames:
        print(filename)
        doc = w.Documents.Open(FileName=filename)
        # # 文档最开始插入文字,这里是插入文档的名字
        # insert = filename.split('.')[0] + '\n'
        # myRange = doc.Range(0, 0)
        # myRange.InsertBefore(insert)

        par = doc.Range(10, doc.Content.End)
        par.ParagraphFormat.LineSpacing = 12

        w.ActiveDocument.Select()
        w.Selection.Font.Name = "微软雅黑"
        w.Selection.Font.Size = "12"
        # 删除空行,这里数量是1,因为回车占一个字符
        for each in w.ActiveDocument.Paragraphs:
            if each.Range.Words.Count == 1:
                each.Range.Delete()
        print("已处理:" + filename)
        # 保存为PDF
        pdf_name = filename.split('.')[0]
        doc.SaveAs(pdf_name, FileFormat=17)
        doc.Close()
    print("处理完毕!")


if __name__ =='__main__':
    root = r'F:\github\Modify_word_using_python\word'
    process()


后续:我用了半个小时就搞定了我女朋友一天的工作量,她高兴疯了。我告诉她,知识就是力量!

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值