我不一个系统化,框架化的工作者,而是是一个解决问题的工作者。
一、需求
1. 从Oracle数据库中取出符合要求的数据
2. 对数据进行格式处理
3.导出按部门保存到不同的sheet中
工具: VS2019 ,Python 3.7
这里会涉及到一些需要用到的包, 可以用pip install 包名称
进行安装, 使用VS提供的扩展工具在3.7版本右键可以看到
安装完成后,也行不能系统还是不能识别import 相应的包,建议重启VS
如果VS中有中文出现一些提示不能解析,建议用Note 编辑工具,对.py文件进行编码转变, 转换为UTF-8
3. 脚本,从Oracle里面获取需要的数据
import cx_Oracle as cx
访问Oracle数据库代码,有好几种方式,我只用了一种
db2=cx.connect('soar','0000','192.168.10.25:1521/CQ')
分别是: 账户,密码,IP,端口,实例名
4. 定义SQL ,也就是你需要的数据
sql3="select role_name as 角色名称,parent_menu as 模块名称,menu_name as 菜单名称 from table1"
也可以不重命名,我只是为了方便看而已, 这里会有一点其他的部分,比如你如果需要换行 ,这就会有一个斜杠可以用, 当然也有其他的方法,我只是为了我的实现目的,就没有去重新整理
sql3="select role_name as 角色名称,parent_menu as 模块名称,menu_name as 菜单名称 " " from table1"
执行得到结果集,并用键值对的方式呈现
cr2=db2.cursor() cr2.execute(sql3) rs2=cr2.fetchall() cr2.close() db2.close()
这就有了游标的方法,关于fetchall() 还有一些其他的方法得到结果集,只是这里不会带出列名称,只有数据值,这就让我很不舒服了, 因为我需要把列名称导入到Excel里面去
5. 获取数据后需要的,就是对数据进行处理,还包括了导入Excel数据应该要呈现的格式,我做这个项目,就是因为客户要不同部门的数据,部门又很多,在每个sheet里面格式又是客户提供的,我是没想一个一个去数据整理,还有格式优化。那会是重复切很无聊的工作
尤其是又不是一两个sheet,是几百个sheet。。。这样我的心情就很不好。
6. 导入需要的pandas部分
import pandas as pd from styleframe import StyleFrame, Styler, utils
7.对Excel格式进行修改跟配置
sf = StyleFrame(pd.DataFrame(rs2,columns=['角色名称', '模块名称', '菜单名称'])) sf.apply_column_style(cols_to_style=["角色名称","模块名称","菜单名称"], styler_obj=Styler(font='Segoe UI', font_size=9 , bold=False , horizontal_alignment=utils.horizontal_alignments.left , wrap_text=True), style_header=True) sf.set_column_width(columns=["角色名称","模块名称","菜单名称"],width=20) ew = StyleFrame.ExcelWriter(r'D:\V1.xlsx') sf.to_excel(ew) ew.save()
当然,这个列名是可以通过一定的方式从数据库中获取,来生成的, 我这里需要的不多,也固定,所以我懒了
官网中有很多对 StyleFrame 的讲解, 我这里只用了简单的,对字体的设置, 列名的设置, 字体是否加粗,字体大小,字体摆放靠左,列的宽度。
上面的代码,是一段一个Sheet的格式,