如何正确合并多个 Word 文档(.docx)并保留格式与图片

张开发
2026/4/18 17:48:50 15 分钟阅读

分享文章

如何正确合并多个 Word 文档(.docx)并保留格式与图片
本文详解使用 python-docx 合并多个 word 文档时的常见错误如内容重叠、页码错乱、图片丢失提供可运行的修复方案、兼容性注意事项及替代建议。 本文详解使用 python-docx 合并多个 word 文档时的常见错误如内容重叠、页码错乱、图片丢失提供可运行的修复方案、兼容性注意事项及替代建议。在使用 python-docx 进行多文档拼接时直接操作底层 XML 元素如 _element虽具灵活性但也极易引发布局错乱与资源丢失问题。原代码存在两个关键缺陷页分隔逻辑位置错误和未处理二进制资源如图片、表格样式、字体等导致输出文档中内容重叠、图片缺失甚至抛出 AttributeError 异常。? 正确的页分隔逻辑在追加内容后插入分页符原代码在读取子文档 前 就调用 sub_doc.add_page_break()这实际是在当前子文档开头插入分页符而非在已拼入内容之后——因此第二份文档会“覆盖”在第一份末尾之上。正确做法是先完整追加当前文档所有元素再为后续文档预留分页空间即在 for element in ... 循环之后判断是否添加分页符from docx import Documentdef combine_word_documents(files, output_pathcombined.docx): # 使用空白文档作为基础需确保 empty.docx 存在且结构完整 combined_doc Document(empty.docx) for i, file_path in enumerate(files): sub_doc Document(file_path) # 1. 逐个复制 body 中的段落级元素paragraphs, tables 等 for element in sub_doc._body._element: combined_doc._body._element.append(element) # 2. 若非最后一个文件在末尾插入分页符 if i len(files) - 1: combined_doc.add_page_break() combined_doc.save(output_path) print(f? 合并完成{output_path})# 调用示例combine_word_documents([Doc2.docx, Doc3.docx])?? 注意python-docx v0.8.11 已弃用 _document_part.body._element应统一使用 sub_doc._body._element如上所示。若仍报错请升级库pip install --upgrade python-docx。? 图片为何丢失根本限制与替代方案python-docx 的核心设计目标是生成和修改文档结构而非完整镜像复制。其不支持自动迁移以下资源 Mokker AI AI产品图添加背景

更多文章