最近在项目中做了一个生成并导出word报表的功能,在这里分享给大家。

经过查看ESPC原有的生成报表代码和网上查阅的一些方法,解决方案的思路如下:

1. 利用pychartdir库生成图表,保存图片,转成字节数据

2. 然后使用office办公软件编写所需要的模板word,另存为xml文件

3. 利用jinja2库渲染修改好的模板,然后写入.doc文件即可

那下面我将我实现的过程记录给大家分享一下。

利用pychartdir库生成图表,保存图片,转成字节数据


1.利用pychartdir库生成一个条形图

首先需要导入pychartdir库


v2-7262c4d3ecce0a83cd1186413b8d1eb9_hd.jpg


我们以生成一个条形图为例子:


v2-661f5e5cfe9b4d41098a1e794e890654_hd.jpg


结果为一张图片:


v2-5b834db254b1bdec7e4430fc2103014e_hd.jpg


2.我们在word中如果只是引用路径,那么生成的word就会出现找不到图片,此时,我们应该使用下面这个函数将图片转化为字节数据:


v2-1c5caa1c4875b139cb97e706175bd3de_hd.jpg



v2-11dc06b18f3e14a5055398c124002249_hd.jpg


此时我们就拿到了我们想要的数据

我们可以将所需要画图的封装成一个工具类,只留取数据接口比如:


v2-fc1eb1dfa7fac95adcb94590eee66fc7_hd.jpg


然后使用office办公软件编写所需要的模板word,另存为xml文件


1.使用office软件编写一个所需要的word模板,编写好之后选择另存,类型选择为xml文件。


v2-ea252f480529926f47b8958c75f90c00_hd.jpg


2,使用sublime或者其他文本编辑打开xml文件,在模板相应位置替换成渲染的数据模型,具体语法和Django模板的语法基本一致,如:


v2-3539f63527791950bc2362722fbaf15d_hd.jpg



v2-786d4790d62acd7535bbcfc360928eb5_hd.jpg


利用jinja2库渲染修改好的模板,然后写入.doc文件即可


1.导入jinja2模块和相应模块


v2-9c76ff30d4c8c3f9b21406702564151c_hd.jpg


2.加载我们刚刚编辑好的word模板


v2-0dad54cf58803a6d39d1f06ce71b0169_hd.jpg


3.打开和渲染模板


v2-b474e8f6f415853754c362245070ee7c_hd.jpg


其中w_id和w_pname属性是word图片的属性,只要每一张图片id name唯一即可

全部代码如下:


v2-2eaadfabb3004796963d0108b0f1be1e_hd.jpg


运行代码,即可生成我们想要的word报表

参考资料及其链接:

Jinja2 安装:


v2-51a6a0b78445df8323775c2db6745d5b_hd.jpg


pychartdir 安装:

Python 中要使用pychartdir的绘图的话需要安装pychartdir模块,其安装方法不同于其他python模块的安装。

1.先下载pychartdir,可从官网 advsofteng.com/download 下载对应的zip包

2.解压后的doc目录下有一个pychartdir.chm帮助文档

3.帮助文档中Installation中有描述安装的方法:

在python的安装目录下的Libsite-packages目录下新建chartdirector目录

将解压后的ChartDirectorlib目录下的所有文件复制到前面创建chartdirector目录下

在site-packages目录下新建一个chartdirector.pth文件,记事本打开,里面添加chartdirector,保存退出

4.打开python IDE,输入from pychartdir import *,如果导入成功则说明安装成功,可正常使用pychartdir

pychartdir API及其demo

advsofteng.com/doc/cdcf

Jinja2文档

docs.jinkan.org/docs/ji

作者:袁庭飞
来源: blog.nsfocus.net/step-g
http://www.magedu.com/?t=ldy_51cto