1 前言
我们现在有一个需求:
每个周期末需要对周期数据进行汇总,然后填入报告中,报告分为以下两个部分:
- 周期内数据的展示和定量分析
- 定性分析 其中,第一部分的展示和定量分析都是基于基础数据的处理和简单分析,流程固定,于是想通过
python
自动化解放双手。
此时假设我们已经拿到需要展示的数据和定量分析结果,我们接下来就可以将相关信息填入模板中去。
在这个过程中,我们主要利用Python
的python-docx
库,可见python-docx-使用Python操作Word(docx)文档。
2 步骤
2.1 准备模板
首先,我们要根据需要准备一个模板,在这里我大致准备了一个示例可供参考:
我们需要提前提取报告中的关键词和关键数据,如二
、季度
、2024
、A
、30.2
等,然后将它们以特定的符号替换,如:
季度
:[$RangeType]
2024
:[$ReportYear]
2024年4月01日
:[$ReportStartDate]
2024年06月30日
:[$ReportEndDate]
- …(符号自定义,能分辨就行)
最终得到的模板是这样的:
2.2 编写代码
思路是:
- 建立关键词→目标值的映射关系
- 打开读取模板
- 逐行将关键词替换为目标值
- 保存 于是得到以下代码:
from docx import Document
# 建立关键词和值的映射关系
replace_map = {
"[$ReportYear]": "2024",
"[$RangeIndex]": "第三季度",
"[$ReportStartDate]": "20240701",
"[$ReportEndDate]": "20240930",
"[$RangeType]": "季度",
"[$HighestValueProductionName]": "A",
"[$HighestValueProductionRate]": "10.2%",
"[$HighestValueProductionRateYearOnYearGrowth]": "12.3%",
"[$HighestValueProductionRateMonthOnMonthGrowth]": "10.3%",
"[$HighestGrowthProductionName]": "B",
"[$HighestGrowthProductionRate]": "30.2%",
"[$HighestGrowthProductionRateYearOnYearGrowth]": "40.2%",
"[$HighestGrowthProductionRateMonthOnMonthGrowth]": "30.4%"
}
# 打开模板文件
document = Document("XXX报告_template.docx")
paragraphs = document.paragraphs # 加载所有段落
# 对每个段落进行操作
for paragraph in paragraphs:
# 读取所有映射关系
for key, value in replace_map.items():
# 将段落里的关键词按照映射关系替换
paragraph.text = str(paragraph.text).replace(key, value)
for paragraph in paragraphs:
print(paragraph.text)
# 保存一下
document.save("2024年第三季度XXX报告.docx")
运行后我们得到以下结果:
完成!快去试试吧~