用Python实现Word多文档合并
用Python实现Word多文档合并
通过手动的方式可以很方便的把多个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
推荐阅读