You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Colab中python-docx复制Word表格内容丢失问题及批量需求

解决python-docx复制文档表格内容丢失问题及批量生成流程实现

一、表格内容丢失的修复方案

直接复制文档时若仅处理段落节点,会忽略表格单元格内的文本内容。需递归遍历文档所有元素(包括表格、单元格内的段落与文本),通过操作docx底层XML元素实现完整内容复制,才能保留表格结构及内部数据。

二、完整批量生成代码实现

以下是Google Colab中可直接运行的代码,涵盖文件上传、模板复制、占位符替换、批量合并及下载全流程:

首先安装依赖:

!pip install python-docx pandas openpyxl

核心功能代码:

from docx import Document
import pandas as pd
from google.colab import files
import os

# 1. 上传文件
print("请上传SAMPLE.docx和Receipt.xlsx文件")
uploaded = files.upload()

# 读取Excel数据
receipt_df = pd.read_excel("Receipt.xlsx")

# 初始化最终输出文档
output_doc = Document()

# 复制文档内容(修复表格内容丢失)
def copy_doc_content(source_doc, target_doc):
    for element in source_doc.element.body:
        # 复制段落/标题
        if element.tag.endswith('p'):
            target_doc.element.body.append(element.copy())
        # 复制表格及内部内容
        elif element.tag.endswith('tbl'):
            target_tbl = element.copy()
            target_doc.element.body.append(target_tbl)

# 替换文档内的占位符
def replace_placeholders(doc, replacements):
    # 替换段落中的占位符
    for para in doc.paragraphs:
        for key, value in replacements.items():
            if f"{{{key}}}" in para.text:
                for run in para.runs:
                    run.text = run.text.replace(f"{{{key}}}", str(value))
    # 替换表格单元格内的占位符
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                for para in cell.paragraphs:
                    for key, value in replacements.items():
                        if f"{{{key}}}" in para.text:
                            for run in para.runs:
                                run.text = run.text.replace(f"{{{key}}}", str(value))

# 3. 按Excel数据循环生成文档
for _, row in receipt_df.iterrows():
    # 加载模板
    temp_doc = Document("SAMPLE.docx")
    # 构建替换字典(需与Excel列名、模板占位符对应)
    replacements = {
        "client_name": row["client_name"],
        "Price": row["Price"],
        # 添加其他需替换的占位符键值对
    }
    # 替换占位符
    replace_placeholders(temp_doc, replacements)
    # 将处理后的内容合并到输出文档
    copy_doc_content(temp_doc, output_doc)
    # 添加分页符区分不同文档
    output_doc.add_page_break()

# 4. 保存并下载最终文档
output_doc.save("OUTPUT.docx")
files.download("OUTPUT.docx")

# 清理临时文件(可选)
if os.path.exists("TEMP.docx"):
    os.remove("TEMP.docx")

关键说明

  • 占位符建议采用{client_name}带大括号的格式,避免与普通文本混淆
  • 直接操作docx的XML元素复制内容,能完整保留原文档的字体、格式及表格结构和内容,比仅复制段落更可靠
  • 替换逻辑需同时覆盖文档段落和表格单元格内的文本,确保所有位置的占位符都被替换

内容的提问来源于stack exchange,提问作者GiantMind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:31:16