智填 - Excel数据智能填充Word文档
概述
将Excel表格数据按Word模板批量生成独立文档。核心能力:模板占位符自动解析、
Excel列与模板字段语义匹配、数据预处理转换、逐行批量渲染。
区别于硬编码字段映射的传统方案,本技能通过AI语义理解实现模板自适应——
无需预定义字段对应关系,AI动态分析任意模板结构并智能匹配。
适用场景
- 渠道投诉核减情况说明批量生成
- 合同/协议批量填充
- 通知书/告知书批量制作
- 月度报表数据填充
- 任意"Excel数据 + Word模板"的文档生成需求
工作流程
第一步:解析Word模板
读取用户提供的Word模板文件,识别其中的占位符。
占位符语法详见 references/placeholder_syntax.md。
支持两种占位符格式:
| 格式 | 示例 | 说明 |
|---|---|---|
{{字段名}} |
{{渠道名称}} |
简单替换 |
{{字段名\|处理器}} |
{{金额\|uppercase}} |
带数据处理的替换 |
运行模板解析脚本提取所有占位符:
python scripts/parse_template.py <template.docx>
输出JSON格式的占位符列表及其在文档中的上下文信息。
第二步:读取Excel数据
读取Excel文件,获取所有工作表名称和列头信息。
关键信息需收集:
- 工作表名称(若多表,询问用户选择)
- 所有列名清单
- 前3行样例数据(用于AI推断数据类型和格式)
第三步:AI语义字段匹配
此步骤由AI完成,非脚本执行。
基于模板占位符与Excel列头进行语义匹配:
- 逐个分析占位符的语义含义
- 与Excel列头进行模糊匹配(支持同义词、缩写、近义表达)
- 对于需拼接/拆分/计算的字段,推断处理规则
- 生成字段映射方案,输出为JSON格式
匹配策略详见 references/field_matching_guide.md。
匹配完成后,向用户展示映射方案并确认:
模板字段 → Excel列名 → 处理方式
─────────────────────────────────────────────────
{{渠道名称}} → 渠道名称 → 直接填充
{{渠道标识}} → 扣罚渠道标识 → 直接填充
{{投诉内容}} → 工单受理内容 → 提取客户诉求
{{流水号}} → 工单流水号 → 直接填充
{{金额大写}} → 扣罚金额 → 金额转大写
第四步:生成字段映射配置
将确认后的映射方案写入JSON配置文件,供渲染脚本使用。
配置格式:
{
"template": "template.docx",
"excel_file": "data.xlsx",
"sheet_name": "核减结果",
"output_dir": "./output",
"filename_pattern": "{{渠道名称}}核减情况说明",
"field_mapping": [
{
"placeholder": "渠道名称",
"source_column": "渠道名称",
"processor": "direct"
},
{
"placeholder": "投诉内容",
"source_column": "工单受理内容",
"processor": "extract_pattern",
"params": {
"patterns": ["客户诉求[::](.*?)(?=#|$)", "用户称[::](.*?)(?=#|$)"],
"fallback": "raw"
}
},
{
"placeholder": "金额大写",
"source_column": "扣罚金额",
"processor": "currency_uppercase"
},
{
"placeholder": "渠道信息",
"source_columns": ["渠道名称", "扣罚渠道标识"],
"processor": "concat",
"params": {
"format": "{0}(渠道标识:{1})"
}
}
]
}
第五步:批量渲染文档
运行渲染脚本,按配置逐行生成Word文档:
python scripts/render_docs.py <config.json>
脚本功能:
- 按field_mapping配置处理每行数据
- 替换模板中的所有占位符
- 保持模板原始格式(字体、段落、表格等)
- 自动创建输出目录
- 文件名冲突时自动添加序号
第六步:验证与交付
生成完成后:
1. 报告成功/失败数量
2. 列出输出文件路径
3. 建议用户抽查首尾各一份文档确认质量
数据处理器列表
以下处理器可在field_mapping的processor字段中使用:
| 处理器 | 说明 | 示例 |
|---|---|---|
direct |
直接填充原值 | "中国移动" → "中国移动" |
uppercase |
转大写 | "abc" → "ABC" |
lowercase |
转小写 | "ABC" → "abc" |
date_format |
日期格式化 | 20260527 → 2026年5月27日 |
currency_uppercase |
金额转中文大写 | 1234.56 → 壹仟贰佰叁拾肆元伍角陆分 |
extract_pattern |
正则提取 | 从长文本中提取特定部分 |
concat |
多列拼接 | 合并多个字段 |
default |
空值默认值 | NaN → "无" |
conditional |
条件判断 | 根据值输出不同文本 |
phone_format |
手机号格式化 | 去除科学计数法 |
custom |
自定义Python表达式 | 任意合法Python表达式 |
处理器详细用法见 references/placeholder_syntax.md。
依赖要求
- Python 3.8+
- python-docx
- openpyxl
- pandas
安装依赖:
pip install python-docx==1.1.2 openpyxl==3.1.5 pandas==2.2.3
注意事项
- 模板中的占位符必须使用
{{}}语法,且字段名不含}}字符 - Excel文件首行必须为列标题行
- 若模板含表格,占位符可放在表格单元格内
- 文件名pattern中的占位符会替换为对应数据值
- 处理大数据量(>500行)时,脚本会分批处理并报告进度
- 生成的文档保持模板原始格式样式
参考文档
references/placeholder_syntax.md— 占位符语法与处理器详细说明references/field_matching_guide.md— AI语义字段匹配策略指南