拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Python 实现自动化Excel报表的步骤

要实现自动化Excel报表, 需要执行多个步骤。更新时间是在2021年04月01日, 具体时刻是15:19:05, 文章的作者是致于数据科学家的小陈。这篇文章主要是介绍了实现自动化进行Excel报表生成的那些步骤, 以此来帮助大家更好地理解和去学习如何使用这一功能, 如果有兴趣的话, 相关的各位朋友可以来进行了解。已经有好几个月都没有写笔记了, 这并不是因为没有积累一些内容, 而是自己有点懒了, 想一想还是要继续把这事情延续下去, 作为在工作成长当中的一部分的一个举动。最近在制作报表的时候一直找不到合适的报表工具, 实在不想编写前端代码和后端代码, 经过反复考虑觉得 Excel 能在一定程度上实现可视化效果, 虽然不能进行动态的交互操作, 但是其他方面都挺好的, 今天分享的是关于如何利用 来自动化处理Excel报表以解放双手并提高工作效率的内容。总体解决方案输出报表这是测试用的假数据。自动化Py脚本基本思路:1. 准备模板数据需要的 SQL2. 先利用那个连接去把数据库给连上,紧接着就去执行一下那个SQL语句, 最后再把结果给返回回来。3. 直接使用Excel打开文件, 然后把这些数据填充到那些已经设定好的固定单元格里面。4. 先进行保存操作, 然后退出。具体的代码内容, 是这样的:import pandas as pdimport xlwings as xwimport pymssql# 各品类月同期def get_last_year_sale(start_date, end_date):各品类同期销量, 对比19年sql_01 fSELECT品类, SUM(数量) AS QTYFROM XXXWHERE 是否电商 1AND 销售时间 BETWEEN DATEADD(YEAR, -2, {start_date}) AND DATEADD(YEAR, -2, {end_date})GROUP BY 品类df pd.read_sql(sql_01, concon)df_xtc df[df[品类] A品类][[品类, QTY]]df_bbk df[df[品类] B品类][[品类, QTY]]return df_xtc, df_bbkdef get_anget_sale(start_date, end_date):返回各品类, 各区域的时间段销量sql fSELECT品类, AGENT, SUM(数量) AS QTY, ROW_NUMBER()OVER(PARTITION BY 品类 ORDER BY SUM(数量) DESC) MY_RANKFROM XXXWHERE 是否电商 1AND 销售时间 BETWEEN {start_date} AND {end_date}GROUP BY AGENT, 品类df pd.read_sql(sql, concon)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_paddef get_machine_sale(start_date, end_date):返回各品类, 各区域的时间段销量sql fSELECT品类, 机型, SUM(数量) AS QTY, ROW_NUMBER()OVER(PARTITION BY 品类 ORDER BY SUM(数量) DESC) MY_RANKFROM V_REALSALEWHERE 是否电商 1AND 销售时间 BETWEEN {start_date} AND {end_date}GROUP BY 机型, 品类df pd.read_sql(sql, concon)df_xtc df[df[品类] A品类][[机型, QTY]]df_bbk df[df[品类] B品类][[机型, QTY]]return df_xtc, df_bbk# maincon 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/1elif m_cur in (4, 04, 5, 05, 6, 06):q_time_start 2021/4/1elif m_cur in (7, 07, 8, 08, 9, 09):q_time_start 2021/7/1else:q_time_start 2021/10/1print()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巅峰版, inplaceTrue)df_q_type_bbk df_q_type_bbk[df_q_type_bbk.QTY 0]# 打开excel 模板 等待数据填充app xw.App(visibleTrue, add_bookFalse)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.valuesdata_sht.range(G9).value df_mm_bbk.values# 当季度同比data_sht.range(B10).value df_qq_xtc.valuesdata_sht.range(G10).value df_qq_bbk.values# 填充各品类当月销量, 注意单元格是写死的哦data_sht.range(I72).value df_m_xtc.valuesdata_sht.range(T72).value df_m_bbk.valuesdata_sht.range(AE72).value df_m_pad.values# 填充当季度销量, 同理是写死的data_sht.range(A54).value df_q_xtc.valuesdata_sht.range(F54).value df_q_bbk.valuesdata_sht.range(K54).value df_q_pad.values# 填充当季度各型号, 同理是写死的data_sht.range(A21).value df_q_type_xtc.valuesdata_sht.range(F21).value df_q_type_bbk.valueswb.save()app.quit()print()print(~~更新结束了哦~~)print()input(请按任意键退出~~)print()print(BYE~~ 人生若只如初见呢~~)打包 EXE 桌面小程序在打包的时候, 其实最好是使用一个干净的、纯净的虚拟环境来进行操作。终端命令: -m venv 虚拟环境名称接着, 需要前往那个脚本所在的目录里面, 然后就可以执行打包这个操作了。main.py -F打包成功后的样子.您可以进行双击操作来运行, 这样就可以了哦。在这个时候, 再次去打开存放于该目录里面的 Excel 模板文件, 会发现数据已经实现了自动的更新。我现在是真正感觉到了, 如果使用开发的思维去制作一些脚本工具的话, 这对于我来处理许多重复性的文员工作而言, 确实能够产生极大的提升效用。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门