目录
一、问题的提出
二、算法分析
三、代码展示
四、注意事项
有一位朋友发来70多个数名命名的doc和docx文件,问我有没有vba代码,可以把这些文件按照数字大小的顺序合并。我试着用了chatgpt,搞了一串vba代码行不通,于时我就找出了Python,尝试了一下还不错。合并doc,docx文件
二、算法分析
在实现转换前,需要进行文件遍历、格式转化,最终合并到新的文件中。以下是算法步骤
- 遍历当前目录文件。 利用os.listdir()来遍历。
- 格式转化。用changeOffice这个模块来实现doc和docx的格式批量转化。
- 合并docx。用python-docx中的Document来读取,追加到前面的文件。
三、代码展示
经过测式,我编制出以下代码:
from docx import Document
from changeOffice import Change
import os,time
Change(".").doc2docx() #把当前目录下的doc批量转化为docx
time.sleep(3) #设置停顿时间,以防出错
files = sorted([file for file in os.listdir(".") if file.endswith(".docx")],key=lambda x:int(x[:-5])) #文件遍历和排序
doc1 = Document(files[0]) # 读取第一个文档
for file in files[1:]:
doc = Document(file) # 读取第二个文档
for element in doc.element.body: #拷贝文件中的信息,# 追加第二个文档内容到第一个文档末尾
doc1.element.body.append(element)
doc1.save('merged_file.docx') # 保存新的合并文件
以上代码优点在于可以保证合并后文件的段落、字体等格式信息不变,而且转换的效率还挺高。大家可以测试一下,有问题随时反馈。
四、注意事项
- VBA和Python在办公自动化方面各有优势。Python最大的优势就是可以利用现成的模块,快速地实现想要的功能,不必从零开始,简化了编程过程,而且代码的运行速度快。
- 上面代码运行前要保证安装有Python环境,同时python-docx, changeOffice两个包也要用pip安装。程序运行时,所有的文件要保持关闭状态,代码文件要放在所有word文件的目录下。
- 这个程序仅适用于合并文件名是数字的word文件,因为这样的文件可以按照顺序合并,其它非数字文件名可以酌情修改代码。
- 程序运行前一定要备份原文件,因为changeOffice在进行文件格式转化后会默认删除原文件。