vb.net 循环生成excel的多个sheet_自动生成报告第一弹
自动生成报告第一弹——定期发布的模板化报告
定期发布的模板化报告,是自动撰写最有效最实用的应用场景。
每周发布的市场数据统计报告、每月编制的投资业绩统计报告、每日风控报告..........
日常的场景,从wind等软件提取数据,数据整理后存入Excel。
Python自动撰写功能,帮大家完成的是,从Excel到Word的最后一步。
只要数据做好了,点击运行,Word自动填充数据,完成报告。
充分解放双手~ 月均减少上百次鼠标点击!
一、准备报告模板
第一步,在报告中需要填入数据处,插入代表该数据的标签。
以项目统计月报为例:
Python的自动撰写模块有一个优点,标签的字体,会自动应用于填入的数据。大家可以预先设置好标签的字体,减少数据填入后再进行调整的工作。
大家可以看到上图中有一个表格,每一格都填入了标签。小伙伴可能会问,如果表格中单元格特别多,一个一个插入标签,工作量是不是太大了。
那个单元格很多的表格/行数不确定的表格如何填充呢?
这里可以运用一个小技巧——循环
大家看到,表头下方的第一行{%tr for a,b,c,d,e in rank1%},是循环的起始句,除了红字的地方直接粘贴就好。
其中a,b,c,d,e,分别与第二行填列的{{a}}、{{b}}、{{c}}、{{d}}、{{e}}五个标签”。
rank1是Excel中存储数据的N*5的列表,后续我们将把表格中的数据一行一行循环填入。
最后一行是循环的结束语句,这一句直接粘贴即可。
这一部分的具体应用,因为还涉及数据格式转换、循环等知识,我们将在下一期详细介绍。
二、提取Excel数据
首先上代码
#导入读取excel的类import xlrd#读取数据底稿.xlsxworkbook=xlrd.open_workbook(r'案例\公众号\数据底稿.xlsx')#提取sheet'项目统计'sheet_data=workbook.sheet_by_name('项目统计') #第三行第二列、第四行第二列的数据cplnum_eop=int(sheet_data.cell(2,1).value)ginum_eop=int(sheet_data.cell(3,1).value)
来,我们一句一句解读
1、导入python自带的可以读取的excel的类
import xlrd
2、读取整个excel
workbook=xlrd.open_workbook(r'案例\公众号\数据底稿.xlsx')
括号中的r'案例\公众号\数据底稿.xlsx'是excel的路径
路径最前面的r,是相对路径的意思,即从python文件夹出发,后续的路径。
如果不用相对地址,完整地址则是
'C:\Documents\Python\案例\公众号\数据底稿.xlsx'
3、提取sheet名为'项目统计'的整个sheet的数据
sheet_data=workbook.sheet_by_name('项目统计')
4、提取单元格数据
假设excel中的数据是这样排列的:
假设我们要提取的是B3、B4两个数据,则提取数据的代码如下:
cplnum_eop=int(sheet_data.cell(2,1).value)ginum_eop=int(sheet_data.cell(3,1).value)
sheet_data.cell(2,1).value
是指sheet_data中,第三行第二列的单元格的数据。
为什么是cell(2,1)呢?为什么不是cell(3,2)?
因为python的数字排列是从0开始的,所以2代表第三个,1代表第2个。
其他数据也可以用上述方法提取,但是要注意数据的格式(关于格式下期详细介绍)。
这里用了int(),将提取的数据变为整数,否则将默认至少1位小数。
那有什么批量读取数据的方法吗?
当然有!
但是需要讲解一个语法,这个语法很简单,几行代码就可以搞定。
我们依然是下期详细介绍,本期主要介绍基本思路~
三、将读取的数据与标签对应起来
这一步很简单,我们直接来看代码:
context={ 'cplnum_eop':cplnum_eop, 'ginum_eop':ginum_eop}
{}以这种括号括起来的变量的类型是字典。
'cplnum_eop':cplnum_eop
这句话中,
'cplnum_eop'是指word中的标签{{cplnum_eop}},
cplnum_eop是指上文中已写入数据的变量。
这一步是将我们读取的数据与word模板中的标签对应起来。
四、替换word模板中的标签
很快我们进入了最后一步,替换标签!
前面,我们已经把标签和数据的对应,存在了context字典中,下面三步:
打开冰箱、放入大象、关上冰箱~
哈哈,虽然是开玩笑,但其实就是这么简单。
打开模板、替换标签、保存文档即可~
#读取WORD模板from docxtpl import DocxTemplatetpl = DocxTemplate(r'案例\公众号\tpl.docx')#替换tpl.render(context)#保存文档tpl.save(r'案例/月报/test.docx')
保存成功后,我们可以在月报文件夹中找到新生成的test文档,文档中的标签已经都填入了对应的数据。
到这里,自动生成报告的基本框架和方法就讲解完了,是不是很简单很容易上手呢~
当然,这个方法不仅可以用于填入数据,文字、图片、表格等都可以。
因为表格可以在模板中先预先设定格式,因此直接在模板中设定好表格格式,再直接填入数据会更加高效。
下一期,我们将详细介绍:
1、如何快速填入表格数据?
2、如何批量赋值变量并将对应关系存入字典?
3、如果表格数据为空,如何让对应出留白?
4、表格数据填入word后,数据形式、格式、小数点位不是我需要的,比如日期的显示,如何调整?
敬请期待~
喵~