当前位置: 首页 > news >正文

vb.net 循环生成excel的多个sheet_自动生成报告第一弹

自动生成报告第一弹——定期发布的模板化报告

定期发布的模板化报告,是自动撰写最有效最实用的应用场景。

每周发布的市场数据统计报告、每月编制的投资业绩统计报告、每日风控报告..........

日常的场景,从wind等软件提取数据,数据整理后存入Excel。

Python自动撰写功能,帮大家完成的是,从Excel到Word的最后一步。

只要数据做好了,点击运行,Word自动填充数据,完成报告

充分解放双手~ 月均减少上百次鼠标点击!

一、准备报告模板

第一步,在报告中需要填入数据处,插入代表该数据的标签。

以项目统计月报为例:

7d04c1466cc50de812e5bad68f3d201d.png

Python的自动撰写模块有一个优点,标签的字体,会自动应用于填入的数据。大家可以预先设置好标签的字体,减少数据填入后再进行调整的工作。

大家可以看到上图中有一个表格,每一格都填入了标签。小伙伴可能会问,如果表格中单元格特别多,一个一个插入标签,工作量是不是太大了。

那个单元格很多的表格/行数不确定的表格如何填充呢?

这里可以运用一个小技巧——循环

a15c6ffb6eed6eb481b11690041b3c43.png

大家看到,表头下方的第一行{%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文件夹出发,后续的路径。

41bd8a1bfd9a5a1298c60c24204c5051.png

如果不用相对地址,完整地址则是

'C:\Documents\Python\案例\公众号\数据底稿.xlsx'

3、提取sheet名为'项目统计'的整个sheet的数据

sheet_data=workbook.sheet_by_name('项目统计') 

4、提取单元格数据

假设excel中的数据是这样排列的:

5802817ff923a00bb7dcec8ee8367f4b.png

假设我们要提取的是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后,数据形式、格式、小数点位不是我需要的,比如日期的显示,如何调整?

敬请期待~

喵~

相关文章:

  • python从零开始到放弃之二_python从入门到放弃QAQ
  • 安科瑞仪表调试工具_安科瑞ADW系列物联网智能电力仪表——吴玲霞/徐振
  • winform ctrl键单击多选_Ctrl+Shift 组合键用法大全,知道一半以上就是高手!
  • springboot中为何参数拿对象接收总是报错_SpringBoot整合Swagger2
  • sqlconnection对象的open()是否成功_VBA与数据库解决方案第8讲:创建ADO对象,到打开记录集的过程...
  • swing的gui是通过何种模式进行事件响应与监听_一起双网卡服务器被黑引发的勒索事件...
  • mysql上传数据太慢_腾讯云Ubuntu18.04部置Django2系列(四):数据库迁移及导入本地mysql数据...
  • 螺丝上的十字磨没了_螺丝为什么要分为一字和十字螺丝?
  • python3.7 opencv安装_win10 anaconda3(python3.7) 安装 opencv
  • python qt开发保存_【转】python qt(pyqt)的文件打开、文件保存、文件夹选择对话框...
  • 支架预压弹性变形值计算_支架和钢管柱贝雷梁现浇简支箱梁施工,终于找到你!!...
  • python类的成员函数有一个参数_python 面向对象类成员(字段 方法 属性)
  • 四参数坐标转换c++_坐标转换问题
  • python的协程和多线程_Python 全栈:多线程和协程入门练习
  • spring 项目启动完成执行_spring项目初始化启动方式
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • bearychat的java client
  • Consul Config 使用Git做版本控制的实现
  • ECMAScript入门(七)--Module语法
  • flask接收请求并推入栈
  • in typeof instanceof ===这些运算符有什么作用
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Mysql5.6主从复制
  • PhantomJS 安装
  • Yeoman_Bower_Grunt
  • Zsh 开发指南(第十四篇 文件读写)
  • 不上全站https的网站你们就等着被恶心死吧
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 记一次删除Git记录中的大文件的过程
  • 将 Measurements 和 Units 应用到物理学
  • 经典排序算法及其 Java 实现
  • 前端自动化解决方案
  • 少走弯路,给Java 1~5 年程序员的建议
  • 项目实战-Api的解决方案
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 移动端解决方案学习记录
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • !!java web学习笔记(一到五)
  • (python)数据结构---字典
  • (搬运以学习)flask 上下文的实现
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (六)Hibernate的二级缓存
  • (排序详解之 堆排序)
  • (转)创业的注意事项
  • *2 echo、printf、mkdir命令的应用
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET导入Excel数据