Python 之使用模板生成周报

使用模板生成周报的步骤:
1、使用 docx 库编辑模板文档
2、将段落中的关键词替换成每周需要改变的参数
3、将统计内容插入表格中
4、生成统计图并插入模板文件
5、将模板文件另外输出

本篇博客会涉及以下几个知识点:
1、使用 docx 依赖编辑模板文件
2、如何替换 word 文档中的关键字
3、在 word 中添加图片
4、将统计内容插入表格

本篇博客会涉及到的依赖库:
docx

1、使用 docx 库打开模板文档

此步骤会涉及到 docx 安装以及该模块的基本使用。

安装

直接使用以下命令进行安装:

sudo pip3 install docx

然后打开 python 的交互交互界面,如果出现如下错误:
在这里插入图片描述
则需要使用以下命令再安装一次:

sudo pip3 install python-docx

然后 import docx 不报错则表示安装成功。

docx 文档编辑 word 文档

在 python3 里,docx 编辑 word 文档,有如下几个方法:
每一段文字都是 paragraph,每一个表格都是 table。

编辑文字
import docx
path = "e:/test.docx"
document = docx.Document(path)
paragraphs = document.paragraphs
for para in paragraphs:
    print(para.text)

这样就打印出了每一段的文字,如果是想要替换,则是如下操作:

for para in paragraphs:
	para.text = 'test'

这样,每一段文字都会被置换成 test 字符串,如果是想要替换某个关键词,在后面的操作中会涉及。

编辑表格
tables = document.tables

对于每一个表格,要涉及的操作都是每个表格内的格子,这个在后面插入数据的地方详细讲述。
因为本文做的是使用模板,所以只讲表格内字符串的替换以及插入操作,不涉及表格的添加与删除。

以上就是本文中涉及 docx 编辑表格需要用到的一些知识点。

2、将段落中的关键词替换成每周需要改变的参数

第一个步骤后中,介绍 docx 编辑文档,直接使用

paragraph.text = 'replace string'

替换整段文字,如果是在一个段落中,模板文件需要修改的只是每个段落中的几个参数,那么我们如果去修改呢?

首先,我们要了解一下,每个段落的构成。
在一个段落中,这个段落并不是一个整体,而是由一个个叫做 run的东西组成。
为什么一个段落会分解成一个个的 run 呢,因为在一个段落里,每一个字符都有可能会被单独加上一些属性,比如字号、字体、颜色、背景等参数。
比如在第一个段落中,文本信息为:
在这里插入图片描述
逐个打印出 run 的 text 文本。
在这里插入图片描述

而我们通过替换每个 run 中的字符,可以保留下 run 中的这些属性,而只替换文字内容。
比如原始本文内容为:
在这里插入图片描述
以下是替换方法:

test = paragraphs[2]
for run in test.runs:
    if 'n' in run.text:
        run.text = run.text.replace("n", str(3))
    if 'hour' in run.text:
        run.text = run.text.replace("hour", str(18))

然后打印出替换后的内容:
在这里插入图片描述
该段落中,关键字部分已经被替换。

3、将统计内容插入表格中

接下来介绍一下表格的基本组成结构。
每一个 table由一个个的 cell 组成,这个特点和 Python 操作 Excel 的方式有点相似,而在每一个cell里要添加内容,可以使用到前面的 段落paragraph 以及之下的 run。
而对于每一个 cell,计数都是从0 开始,也就是说,要定位到表格的第一个格子,是 cell(0, 0)
以下是向格子中添加内容的方法:

table = document.tables[0]
run = table.cell(0,0).paragraphs[0].add_run('this is add string')

以上代码片段就向 table 的第一个格子添加了一段测试字符串。
如果需要将该 run 的字符设置字号大小,则使用如下代码:

run.font.size = docx.shared.Pt(18) 
4、生成统计图并插入模板文件

要生成报表,比如折线图,柱状图,饼图等,这个内容我会另开一篇博文,这里只讲述如果插入模板文件。
在将图片插入模板文件的过程中,尝试了一些方法,比如直接插入,比如插入 表格的 cell 中,这就涉及几个问题:
如何定位图片的插入地方,插入图片后的排版。

如果是直接通过段落,也就是 paragraph 来定位,会有一个问题,插入图片后显示不全,也就是说字体与图片的悬浮问题。
当然,直接在 word 文档中插入也有这个问题,可以通过将段落改为 单倍行距的方式来解决。

但是通过向 table 的 cell 中插入图片可以一次性解决这个问题。

但是需要注意一点,就是需要将表格 table 设置为隐藏边框。
以下是插入图片的方法:

run = document.tables[1].cell(0, 0).paragraphs[0].add_run()
run.add_picture(image_path, width=Inches(5.25))

其中, width 这个参数是用来设置 图片的大小。

5、将模板文件另外输出

通过以上的操作步骤生成一个新的周报文件以后,需要将其另外输出到一个地址,而原有模板文件不会改变。
以下是输出操作:

document.save(document_path)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值