1 前言

我们现在有一个需求:

每个周期末需要对周期数据进行汇总,然后填入报告中,报告分为以下两个部分:

  1. 周期内数据的展示和定量分析
  2. 定性分析 其中,第一部分的展示和定量分析都是基于基础数据的处理和简单分析,流程固定,于是想通过python自动化解放双手。

此时假设我们已经拿到需要展示的数据和定量分析结果,我们接下来就可以将相关信息填入模板中去。

在这个过程中,我们主要利用Pythonpython-docx库,可见python-docx-使用Python操作Word(docx)文档

2 步骤

2.1 准备模板

首先,我们要根据需要准备一个模板,在这里我大致准备了一个示例可供参考:

我们需要提前提取报告中的关键词和关键数据,如季度2024A30.2等,然后将它们以特定的符号替换,如:

  • 季度:[$RangeType]
  • 2024:[$ReportYear]
  • 2024年4月01日:[$ReportStartDate]
  • 2024年06月30日:[$ReportEndDate]
  • …(符号自定义,能分辨就行) 最终得到的模板是这样的:

2.2 编写代码

思路是:

  1. 建立关键词目标值的映射关系
  2. 打开读取模板
  3. 逐行将关键词替换为目标值
  4. 保存 于是得到以下代码:
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")

运行后我们得到以下结果:

完成!快去试试吧~