2020.10.13 Python 处理数据生成多Sheet Excel

我不一个系统化,框架化的工作者,而是是一个解决问题的工作者。

一、需求  

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的格式,

 

posted @ 2020-10-13 15:10  soar.pang  阅读(771)  评论(0编辑  收藏  举报