我的知识记录

Python Word合并多个文档为一个教程

用python-docx把多个Word文档按顺序合并成一个,保留原文档格式,自动分页,适合合订报告、汇编资料、批量文档归档场景。

场景痛点

几个同事各写了一份报告章节,最后要拼成一份完整文档。手动复制粘贴,格式乱、字体变、图片错位,合完还要重新排版。用python-docx可以把多个docx按顺序合并成一个,保留每个文档原有格式,自动分页,十几份文档几秒合并完,格式不乱。

用到的库

pip install python-docx

完整代码

# 导入库
from docx import Document
import os
from copy import deepcopy

def merge_documents(doc_list, output_path):
"""
把多个Word文档按顺序合并成一个
doc_list: 要合并的文件路径列表
"""
# 以第一个文档为基础
merged_doc = Document(doc_list[0])

# 从第二个文档开始逐个追加
for file_path in doc_list[1:]:
print(f'正在合并:{file_path}')
sub_doc = Document(file_path)

# 每个文档之间加分页符
merged_doc.add_page_break()

# 复制子文档的所有段落
for para in sub_doc.paragraphs:
# 深拷贝段落元素,保留格式
new_para = deepcopy(para._element)
merged_doc.element.body.append(new_para)

# 复制子文档的所有表格
for table in sub_doc.tables:
new_table = deepcopy(table._element)
merged_doc.element.body.append(new_table)

# 复制子文档的所有图片(通过inline shape)
# 注意:图片需要同时复制关系,复杂场景建议用模板法

merged_doc.save(output_path)
print(f'\n合并完成:{output_path}')

def merge_folder(folder_path, output_path):
"""合并文件夹下所有docx文件,按文件名排序"""
docx_files = []
for filename in sorted(os.listdir(folder_path)):
if filename.endswith('.docx') and not filename.startswith('~'):
docx_files.append(os.path.join(folder_path, filename))

if not docx_files:
print('文件夹里没有docx文件')
return

print(f'共发现 {len(docx_files)} 个文档,开始合并...')
merge_documents(docx_files, output_path)

if __name__ == '__main__':
merge_folder(
folder_path='./要合并的文档',
output_path='合并后的完整文档.docx'
)

代码讲解

  • 合并思路:以第一个文档为基础,把后面每个文档的段落和表格元素逐个深拷贝追加到基础文档的body里。deepcopy(para._element)保留了段落的所有XML属性,包括字体、对齐、样式,所以合并后格式不会丢。
  • 每个文档之间用add_page_break()加一个分页符,保证原文档第一页从新的一页开始,不会和上一文档尾部挤在一起。
  • 段落和表格分别处理:paragraphs里是正文段落,tables里是表格,两者都要拷贝,否则会丢表格。
  • os.listdir配合sorted()按文件名排序合并,如果你按"01_第一章.docx"、"02_第二章.docx"这种方式命名,合并顺序就是章节顺序。
  • 图片场景比较复杂,因为图片是以关系(relationship)方式存在docx包里的,单纯拷贝XML元素图片会丢失。纯文字和表格合并效果最好。

运行结果

运行脚本后,./要合并的文档文件夹里的所有docx按文件名顺序合并成一个合并后的完整文档.docx。打开可以看到每个原文档内容按顺序排列,文档之间自动分页,格式保持原样,段落和表格都在。

注意事项

  • 图片多的文档用这个方法合并会丢图片,图片场景建议用Word的"插入对象→文件中的文字"功能,或者用docxcompose库。
  • 合并后样式可能有轻微差异,因为不同文档的Heading样式定义可能不同,建议合并前统一用同一个模板。
  • 页码如果各文档单独编号,合并后页码会重复,需要在合并文档里重新设置页码连续编号。
  • 合并前备份原文件,操作不影响原文件,但养成备份习惯。

Python Word合并多个文档为一个教程

标签:

更新时间:2026-09-14 21:46:00

上一篇:Python Word文档属性元信息修改:批量改作者

下一篇:Python Word插入表格教程:带样式数据填充