Py 实现自动化Excel报表

京东优惠券 https://www.fenfaw.net/

好几个月没有写笔记了, 并非没有积累, 而是有点懒了. 想想还是要续上, 作为工作成长的一部分哦.

最近有做一些报表, 但一直找不到一个合适的报表工具, 又实在不想写前端, 后端... 思来想去, 感觉 Excel 就一定程度上能做可视化的, 除了不能动态交互外, 其他都挺好. 今天分享的就是一个关于如何用 Py 来自动化Excel 报表, 解放双手, 提高工作效率哦.

总体解决方案

输出报表

当然是测试用的假数据啦.

自动化Py脚本

基本思路:
1. 准备模板数据需要的 SQL
2. 用 Pandas 连接 数据库 并执行 SQL, 返回 DataFrame
3. 用 Xlwings 直接打开 Excel, 并将这些 DataFrame 填充到 写死的 单元格
4. 保存并退出

具体代码如下哦:

import pandas as pd
import xlwings as xw
import pymssql# 各品类月同期
def get_last_year_sale(start_date, end_date):"""各品类同期销量, 对比19年"""sql_01 = f"""SELECT 品类, SUM(数量) AS QTYFROM XXXWHERE 是否电商 = 1 AND 销售时间 BETWEEN DATEADD(YEAR, -2, '{start_date}') AND DATEADD(YEAR, -2, '{end_date}')     GROUP BY 品类"""df = pd.read_sql(sql_01, con=con)df_xtc = df[df['品类'] == 'A品类'][['品类', 'QTY']]df_bbk = df[df['品类'] == 'B品类'][['品类', 'QTY']]return df_xtc, df_bbk def get_anget_sale(start_date, end_date):"""返回各品类, 各区域的时间段销量"""sql = f"""SELECT 品类, AGENT, SUM(数量) AS QTY, ROW_NUMBER()OVER(PARTITION BY 品类 ORDER BY SUM(数量) DESC) MY_RANKFROM XXXWHERE 是否电商 = 1 AND 销售时间 BETWEEN '{start_date}' AND '{end_date}'GROUP BY AGENT, 品类"""df = pd.read_sql(sql, con=con)df_xtc = df[df['品类'] == 'A品类'][['AGENT', 'QTY']]df_bbk = df[df['品类'] == 'B品类'][['AGENT', 'QTY']]df_pad = df[df['品类'] == 'C品类'][['AGENT', 'QTY']]return df_xtc, df_bbk, df_pad  def get_machine_sale(start_date, end_date):"""返回各品类, 各区域的时间段销量"""sql = f"""SELECT 品类, 机型, SUM(数量) AS QTY, ROW_NUMBER()OVER(PARTITION BY 品类 ORDER BY SUM(数量) DESC) MY_RANKFROM V_REALSALEWHERE 是否电商 = 1 AND 销售时间 BETWEEN '{start_date}' AND '{end_date}'GROUP BY 机型, 品类"""df = pd.read_sql(sql, con=con)df_xtc = df[df['品类'] == 'A品类'][['机型', 'QTY']]df_bbk = df[df['品类'] == 'B品类'][['机型', 'QTY']]return df_xtc, df_bbk # main
con = pymssql.connect('xxxxx', 'sxxx', 'xxxxxx', 'xxxxx')# 基础配置: 根据用户输入当前日期, 输出当月, 当季度第一天
print("欢迎哦, 此小程序专门为XX看板做数据自动更新呢~")
print()today = input("请输入截止日期(昨天), 形如: 2021/5/20 按回车结束:   ")if len(today.split('/')) != 3:raise "日期格式输入错误!!, 请按照形如 '2021/5/20'的格式重新输入"
else:m_cur = today.split('/')[1]m_first_day = '2021/' + m_cur + '/1'# 季度第一天
if m_cur in ('1', '01', '2', '02', '3', '03'):q_time_start = '2021/1/1'elif m_cur in ('4', '04', '5', '05', '6', '06'):q_time_start = '2021/4/1'elif m_cur in ('7', '07', '8', '08', '9', '09'):q_time_start = '2021/7/1'
else:q_time_start = '2021/10/1'print()
print("正在开始更新....")
print("提示, 接下看到闪退, 是正常现象, 就程序模拟人去打开文件, 填充数据, 不要紧张哦~~~")# 去年月, 季度同期
df_mm_xtc, df_mm_bbk = get_last_year_sale(m_first_day, today)
df_qq_xtc, df_qq_bbk = get_last_year_sale(q_time_start, today)# 当月各地区累积销量
df_m_xtc, df_m_bbk, df_m_pad = get_anget_sale(m_first_day, today)# 各地区当季度销量
df_q_xtc, df_q_bbk, df_q_pad = get_anget_sale(q_time_start, today)# 各机型当季度销量
df_q_type_xtc, df_q_type_bbk = get_machine_sale(q_time_start, today)
# 过滤掉 销量为0的型号
df_q_type_xtc = df_q_type_xtc[df_q_type_xtc.QTY > 0]
df_q_type_xtc.replace('Z6áÛ·å°æ', 'Z6巅峰版', inplace=True)df_q_type_bbk = df_q_type_bbk[df_q_type_bbk.QTY > 0]# 打开excel 模板 等待数据填充
app = xw.App(visible=True, add_book=False)app.display_alerts = False    # 关闭一些提示信息,可以加快运行速度。 默认为 True。
app.screen_updating = Truewb = app.books.open("XXX_全品类_看板.xlsx")
data_sht = wb.sheets['数据']# 19年当月同期销量
data_sht.range('B9').value = df_mm_xtc.values
data_sht.range('G9').value = df_mm_bbk.values# 当季度同比
data_sht.range('B10').value = df_qq_xtc.values
data_sht.range('G10').value = df_qq_bbk.values# 填充各品类当月销量, 注意单元格是写死的哦
data_sht.range('I72').value = df_m_xtc.values
data_sht.range('T72').value = df_m_bbk.values
data_sht.range('AE72').value = df_m_pad.values# 填充当季度销量, 同理是写死的
data_sht.range('A54').value = df_q_xtc.values
data_sht.range('F54').value = df_q_bbk.values
data_sht.range('K54').value = df_q_pad.values# 填充当季度各型号, 同理是写死的
data_sht.range('A21').value = df_q_type_xtc.values
data_sht.range('F21').value = df_q_type_bbk.valueswb.save()
app.quit()print()
print("~~更新结束了哦~~")
print()
input("请按任意键退出~~")
print()
print('BYE~~ 人生若只如初见呢~~')

打包 EXE 桌面小程序

最好用一个纯净的 虚拟环境打包.

终端命令: python -m venv 虚拟环境名称

然后进入脚本目录下, 进行打包哦.

pyinstaller main.py -F

打包成功后的样子.

双击运行即可哦.

这时候再重新打开该目录下的 Excel 模板, 发现数据已经自动更新了.

我现在真的感受到, 用开发的思维做一些脚本工具, 真的会极大提高我现在当文员的很多重复性工作哦!

Python 实现自动化 Excel 报表相关推荐

  1. python自动汇总表格_用Python自动生成Excel报表

    作者 / 来源:林骥(ID:linjiwx) 01 安装和导入模块 以 Python 中的 openpyxl 模块为例,它能够读取和修改 Excel 文件,如果你还没有安装,可以通过以下命令进行安装: ...

  2. 用Python自动生成Excel报表

    在日常工作中,可能会有一些重复无聊的任务,比如说,从 Excel 或数据库中收集一些数据,设置相应的数据格式并做成报表. 类似这种重复无聊的任务,我们完全可以交给 Python 去自动完成,只要第一次 ...

  3. python自动生成excel报表

    1.将SQL语句查询的内容,直接写入到excel报表中,以下为全部脚本.要求:此版本必须运维在windows平台,并且安装了excel程序,excel版本不限. python版本为2.7 if b 判 ...

  4. 『Python - Xlwings』Excel报表自动化中常用函数/方法

    用xlwings做了几个项目,总结些个人常用的方法 e n v env env: → \rightarrow → x l s i n g s : xlsings: xlsings: 0.22.2 创建 ...

  5. python接口自动化-excel参数化二

    上一篇我们讲过了表格参数化的具体思路,但是只适用于表格中只有一个功能点的用例,那么表格里边有多个功能点,那要怎么做表格参数化呢,今天我们就来讲一讲. 1.用例 上边这个表格里边有两个功能的用例,分别是 ...

  6. python自动化表格处理软件_Python自动化处理Excel报表,我的工作更轻松了!

    没有转义的Excel! Excel无处不在,即使我们使用了Python之类强大的辅助工具,依然无法摆脱Excel. 因为你的老板和同事仍然需要方便的方法来访问重要数据. 但是,这并不意味着你不能通过使 ...

  7. python excelwriter保存路径_Python自动化处理Excel报表,我的工作更轻松了!

    没有转义的Excel! Excel无处不在,即使我们使用了Python之类强大的辅助工具,依然无法摆脱Excel.因为你的老板和同事仍然需要方便的方法来访问重要数据.但是,这并不意味着你不能通过使用P ...

  8. 工作表格excel用python_Python自动化处理Excel报表,工作更轻松

    没有转义的Excel! Excel无处不在,即使我们使用了Python之类强大的辅助工具,依然无法摆脱Excel. 因为你的老板和同事仍然需要方便的方法来访问重要数据. 但是,这并不意味着你不能通过使 ...

  9. python sqlserver 列名_报表自动化,三流用Excel,二流用Python,一流用它

    从事数据工作的人都知道,企业每天都要做很多报表,这个过程当中会涉及到很多手工操作和常规性报表.为了减少人工介入,节省工作时间,我们会想办法将一部分操作用工具或代码来替代,这个过程就称为报表自动化. 报 ...

最新文章

  1. 点评主流软件开发技术
  2. 从编程角度看32位和64位
  3. 黄聪:WordPress判断当前用户是否为管理员登录
  4. 在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)
  5. LTE学习:MCS(调制与编码策略) CSI(信道状态信息)
  6. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库
  7. IDEA官方中文版插件
  8. 2022年如何申请延迟还款(国家助学贷款)
  9. maven:pom文件详解
  10. 先进的分销管理系统(ADMS)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  11. ideaIU-2018.3.5版本安装
  12. Matlab求解空间曲线的切线和法平面
  13. 联想计算机usb启动怎么办,联想电脑没有u盘启动该如何解决?解决联想电脑没有u盘启动的方法...
  14. 【STM32H7的DSP教程】第16章 DSP功能函数-数据拷贝,数据填充和浮点转定点
  15. win10系统以太网连接显示“未识别网络”问题的解决
  16. PS快捷键大全,记住这些就够了!
  17. Windows调试工具入门-3-WinDbg内核调试配置
  18. 国家区块链漏洞库2020年区块链安全态势感知报告
  19. Python招聘职位大体是两个方向
  20. springboot 小程序微信支付

热门文章

  1. 定向保理与非定向保理
  2. matlab采交流电压幅值,基于MATLAB的电力电子技术仿真分析
  3. SSH基础:启用调试模式确认连接过程
  4. RabbitMQ-ack、nack、reject、unacked
  5. Facebook发币,互联网与区块链的生死竞速开始了
  6. 专家打分法matlab,针对贝叶斯网络中引入专家评价的先验概率评估方法与流程
  7. 常用正则表达式—邮箱(Email)
  8. 外出旅游注意事项必须注意的小细节
  9. 本地jar包推送到maven私有仓库常用的3种方式
  10. Windows平台的容器