欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 實現(xiàn)自動化Excel報表的步驟

 更新時間:2021年04月01日 15:19:05   作者:致于數(shù)據(jù)科學家的小陳  
這篇文章主要介紹了Python 實現(xiàn)自動化Excel報表的步驟,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下

好幾個月沒有寫筆記了, 并非沒有積累, 而是有點懶了. 想想還是要續(xù)上, 作為工作成長的一部分哦.

最近有做一些報表, 但一直找不到一個合適的報表工具, 又實在不想寫前端, 后端... 思來想去, 感覺 Excel 就一定程度上能做可視化的, 除了不能動態(tài)交互外, 其他都挺好. 今天分享的就是一個關(guān)于如何用 Py 來自動化Excel 報表, 解放雙手, 提高工作效率哦.

總體解決方案

輸出報表

當然是測試用的假數(shù)據(jù)啦.

自動化Py腳本

基本思路:
1. 準備模板數(shù)據(jù)需要的 SQL
2. 用 Pandas 連接 數(shù)據(jù)庫 并執(zhí)行 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(數(shù)量) AS QTY
  FROM XXX
  WHERE 是否電商 = 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):
    """返回各品類, 各區(qū)域的時間段銷量"""
    sql = f"""
    SELECT 
     品類
     , AGENT
     , SUM(數(shù)量) AS QTY
     , ROW_NUMBER()OVER(PARTITION BY 品類 ORDER BY SUM(數(shù)量) DESC) MY_RANK
    FROM XXX
    WHERE 是否電商 = 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):
  """返回各品類, 各區(qū)域的時間段銷量"""
  sql = f"""
  SELECT 
   品類
   , 機型
   , SUM(數(shù)量) AS QTY
   , ROW_NUMBER()OVER(PARTITION BY 品類 ORDER BY SUM(數(shù)量) DESC) MY_RANK
  FROM V_REALSALE
  WHERE 是否電商 = 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')

# 基礎配置: 根據(jù)用戶輸入當前日期, 輸出當月, 當季度第一天 
print("歡迎哦, 此小程序?qū)iT為XX看板做數(shù)據(jù)自動更新呢~")
print()

today = input("請輸入截止日期(昨天), 形如: 2021/5/20 按回車結(jié)束:  ")

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("提示, 接下看到閃退, 是正?,F(xiàn)象, 就程序模擬人去打開文件, 填充數(shù)據(jù), 不要緊張哦~~~")

# 去年月, 季度同期 
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)

# 當月各地區(qū)累積銷量
df_m_xtc, df_m_bbk, df_m_pad = get_anget_sale(m_first_day, today)

# 各地區(qū)當季度銷量 
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 模板 等待數(shù)據(jù)填充 
app = xw.App(visible=True, add_book=False)

app.display_alerts = False  # 關(guān)閉一些提示信息,可以加快運行速度。 默認為 True。
app.screen_updating = True

wb = app.books.open("XXX_全品類_看板.xlsx")
data_sht = wb.sheets['數(shù)據(jù)']

# 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.values

wb.save()
app.quit()

print()
print("~~更新結(jié)束了哦~~")
print()
input("請按任意鍵退出~~")
print()
print('BYE~~ 人生若只如初見呢~~')

打包 EXE 桌面小程序

最好用一個純凈的 虛擬環(huán)境打包.

終端命令: python -m venv 虛擬環(huán)境名稱

然后進入腳本目錄下, 進行打包哦.

pyinstaller main.py -F

打包成功后的樣子.

雙擊運行即可哦.

這時候再重新打開該目錄下的 Excel 模板, 發(fā)現(xiàn)數(shù)據(jù)已經(jīng)自動更新了.

我現(xiàn)在真的感受到, 用開發(fā)的思維做一些腳本工具, 真的會極大提高我現(xiàn)在當文員的很多重復性工作哦!

以上就是Python 實現(xiàn)自動化Excel報表的步驟的詳細內(nèi)容,更多關(guān)于python 自動化Excel報表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python sql注入 過濾字符串的非法字符實例

    Python sql注入 過濾字符串的非法字符實例

    這篇文章主要介紹了Python sql注入 過濾字符串的非法字符實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python實現(xiàn)找出數(shù)組中第2大數(shù)字的方法示例

    Python實現(xiàn)找出數(shù)組中第2大數(shù)字的方法示例

    這篇文章主要介紹了Python實現(xiàn)找出數(shù)組中第2大數(shù)字的方法,涉及Python針對數(shù)組的排序、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • django列表篩選功能的實現(xiàn)代碼

    django列表篩選功能的實現(xiàn)代碼

    這篇文章主要介紹了django列表篩選功能的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 全網(wǎng)最全python庫selenium自動化使用詳細教程

    全網(wǎng)最全python庫selenium自動化使用詳細教程

    這篇文章主要介紹了python庫selenium自動化使用詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-01-01
  • Python Attention注意力機制的原理及應用詳解

    Python Attention注意力機制的原理及應用詳解

    這篇文章主要介紹了Python Attention注意力機制的原理及應用,Attention機制是深度學習中的一種技術(shù),特別是在自然語言處理和計算機視覺領域中得到了廣泛的應用,需要的朋友可以參考下
    2025-05-05
  • Python函數(shù)之zip函數(shù)的介紹與實際應用

    Python函數(shù)之zip函數(shù)的介紹與實際應用

    zip() 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的對象(python2 返回的是這些元組組成的列表 ),下面這篇文章主要給大家介紹了關(guān)于Python函數(shù)之zip函數(shù)實際應用的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • python神經(jīng)網(wǎng)絡VGG16模型復現(xiàn)及其如何預測詳解

    python神經(jīng)網(wǎng)絡VGG16模型復現(xiàn)及其如何預測詳解

    這篇文章主要為大家介紹了VGG16模型的復現(xiàn)及其詳解(包含如何預測),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python中如何使用if語句處理列表實例代碼

    Python中如何使用if語句處理列表實例代碼

    這篇文章主要給大家介紹了關(guān)于在Python中如何使用if語句處理列表的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • 詳解Python 裝飾器執(zhí)行順序迷思

    詳解Python 裝飾器執(zhí)行順序迷思

    這篇文章主要介紹了詳解Python 裝飾器執(zhí)行順序迷思,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • python繪圖subplots函數(shù)使用模板的示例代碼

    python繪圖subplots函數(shù)使用模板的示例代碼

    這篇文章主要介紹了python繪圖subplots函數(shù)使用模板的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論