已用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
相关产品推荐
相关产品推荐

