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

  • 相关阅读:
    动态规划 简单的分割问题的解决方案钢棒
    SICP 1.20经验
    辛星一起了解下后续PHP性能功能
    汽车之家购买价格PC真正的原因阿拉丁
    可怜,的分母。
    [ACM] poj 1064 Cable master (二进制搜索)
    从Access创建Sqlite数据库
    变化的阅读程序猿自学习
    ArcEngine载入中SDE问题栅格数据
    pinyin4j新手教程
  • 原文地址:https://www.cnblogs.com/Soar-Pang/p/13808970.html
Copyright © 2020-2023  润新知