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

已用Pandas提取Google Sheet数据,如何导入Word模板指定位置?

实现Google Sheet数据自动填充Word模板的方案

核心工具:python-docx

用python-docx库可以直接操作Word文档的内容和格式,完美匹配你的需求——替换占位符、设置粗体、调整字体颜色。

步骤1:准备Word模板

在你的Word模板里,给需要填充的位置设置唯一占位符,比如:

  • 对应「New」列粗体数据的占位符:{{new_用户量}}、{{new_销售额}}
  • 对应「Diff」列颜色数据的占位符:{{diff_用户量}}、{{diff_销售额}}

步骤2:编写填充代码

假设你已经用Pandas把Google Sheet的数据提取到了df中,以下是完整的填充逻辑:

from docx import Document
from docx.shared import RGBColor

# 1. 加载Word模板
doc = Document("weekly_report_template.docx")

# 2. 从Pandas数据框中提取需要填充的数据(示例)
data_map = {
    "new_用户量": df.loc[0, "New"],
    "new_销售额": df.loc[1, "New"],
    "diff_用户量": df.loc[0, "Diff"],
    "diff_销售额": df.loc[1, "Diff"]
}

# 3. 处理段落中的占位符
for para in doc.paragraphs:
    # 处理「New」列的粗体数据
    for key in [k for k in data_map.keys() if k.startswith("new_")]:
        placeholder = f"{{{{{key}}}}}"
        if placeholder in para.text:
            for run in para.runs:
                if placeholder in run.text:
                    run.text = run.text.replace(placeholder, str(data_map[key]))
                    run.bold = True
    
    # 处理「Diff」列的颜色数据(假设正数绿色,负数红色)
    for key in [k for k in data_map.keys() if k.startswith("diff_")]:
        placeholder = f"{{{{{key}}}}}"
        if placeholder in para.text:
            diff_value = data_map[key]
            for run in para.runs:
                if placeholder in run.text:
                    run.text = run.text.replace(placeholder, str(diff_value))
                    if diff_value > 0:
                        run.font.color.rgb = RGBColor(0, 176, 80)  # 深绿色
                    elif diff_value < 0:
                        run.font.color.rgb = RGBColor(255, 0, 0)  # 红色

# 4. 处理表格中的占位符(如果模板包含表格)
for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            for key in data_map.keys():
                placeholder = f"{{{{{key}}}}}"
                if placeholder in cell.text:
                    for run in cell.paragraphs[0].runs:
                        if placeholder in run.text:
                            run.text = run.text.replace(placeholder, str(data_map[key]))
                            if key.startswith("new_"):
                                run.bold = True
                            elif key.startswith("diff_"):
                                diff_val = data_map[key]
                                if diff_val > 0:
                                    run.font.color.rgb = RGBColor(0, 176, 80)
                                elif diff_val < 0:
                                    run.font.color.rgb = RGBColor(255, 0, 0)

# 5. 保存填充后的报告
doc.save("filled_weekly_report.docx")

关键细节说明

  • 占位符用{{}}包裹是为了避免和普通文本冲突,你也可以用其他独特标记,只要统一即可
  • 处理文本时要遍历run而非直接替换整个段落文本,这样能保留模板原有格式,仅修改目标内容
  • 颜色值可根据需求调整,RGBColor接受0-255范围的红、绿、蓝数值
  • 如果模板有复杂元素(如文本框、嵌套表格),需针对性遍历对应元素处理占位符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:30:52