当前位置: 移动技术网 > IT编程>脚本编程>Python > 用Python实现Word多文档合并

用Python实现Word多文档合并

2020年07月08日  | 移动技术网IT编程  | 我要评论

通过手动的方式可以很方便的把多个Word文档合并为一个。但如何通过代码实现批量Word的合并呢?操作步骤来了。

1、使用python-docx和docxcompose扩展库

安装扩展库

pip install python-docx docxompose

合并Docx

from docx import Document
from docxcompose.composer import Composer

def combine_docx(master, sub):
    if not os.path.exists(sub):#待合并文件必须存在
        return False

    if not master.endswith('.docx'):#主文件必须是docx格式(可以不存在)
        return False

    sub_docx = sub
    if not sub.endswith('.docx'):
        sub_docx = saveAsDocx(sub)

    if os.path.exists(master):
        doc_master = Document(master)
        doc_master.add_page_break()
        cp = Composer(doc_master)
        cp.append(Document(sub_docx))
    else:
        #master不存在,则sub直接给master
        doc_master = Document(sub_docx)

    doc_master.save(master)
    return True

2、doc另存为docx

因为python-docx只能合并docx,对于rtf和doc无能为力,因此需要把doc另存为docx

。需要使用win32com。

安装扩展库

pip install pywin32

另存为docx

import win32com.client as wc
word = wc.gencache.EnsureDispatch('Word.Application')

#Doc另存为Docx
def saveAsDocx(file):
    word.Visible = False
    word.DisplayAlerts = False
    doc = word.Documents.Open(file, False)#打开文档,不提示转换确认框
    new_file = file.split('.')[0] + '.docx'
    doc.SaveAs(new_file, 12)
    doc.Close()
    
    return new_file

3、发布EXE

pyinstaller

pyinstaller -D DocMergeTool.py

在dist目录下生成 DocMergeTool文件夹,测试运行没有问题,打包独立exe

pyinstaller -Fw DocMergeTool.py

-F 独立exe

-w 不显示黑窗

生成DocMergeTool.exe,完美运行。唯一不满意的一点是exe太大了,居然有225mb。在网上查了一下,是因为Anconda环境里面包含了太多不需要的依赖。

网上有两个方案:1)创建一个干净的Python环境,只安装需要的扩展库,在该环境下打包;2)在anconda里创建一个新的虚拟环境,安装需要的扩展库,重新打包。

先试了第二种方案,发现大小不变,还是200多mb。所以选了第一种方案,在虚拟机上安装了干净的python环境,重新打包,最终exe文件大小控制到15mb,初步接受。

过程碰到几个问题:生成的exe运行时提示win32com库找不到;doccompose模板文件找不到。解决办法见爬坑章节。

4、爬坑

爬坑1:打开rtf或doc时避免弹出

虽然设置了word.Visible = False和word.DisplayAlerts = False,但是通过word.Documents.Open(file)打开rtf时还是会弹转换类型确认框。

在这里插入图片描述

该选项在这里:

在这里插入图片描述
可以手动关掉,但是用户未必知道,所以还是要从代码上解决。win32com实际调用的是以com方式调用office接口,所以祭出MSDN:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.documents.open?view=word-pia
在这里插入图片描述

ConfirmConversions就是我们要找的,给它传False,就不会弹转换类型确认框了。

爬坑2:另存为docx

https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word._document.saveas?view=word-pia

在这里插入图片描述

FileFormat对应值在该链接可以找到:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.wdsaveformat?view=word-pia

爬坑3:doccompose模板文件找不到

提示如下:

FileNotFoundError: [Errno 2] No such file or directory: ‘C:\Users\Administrator\dist\xxx\docxcompose\templates\custom.xml’

解决办法:

找到docxcompose\templates\custom.xml文件所在的位置,通过–add-data 参数添加到打包文件中。另外也可以使用spec文件,更强大,更灵活。可以参考传送门

pyinstaller
-Fw --add-data C:\work\docxcompose\templates\*.*;docxcompose\templates\.
C:\work\DocMergeTool.py

也可以直接下载使用:百度网盘 提取码:zpr1

本文地址:https://blog.csdn.net/lsyoulin/article/details/107187064

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网