主頁(yè) > 知識(shí)庫(kù) > Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟

Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟

熱門(mén)標(biāo)簽:400電話申請(qǐng)服務(wù)商選什么 千陽(yáng)自動(dòng)外呼系統(tǒng) 工廠智能電話機(jī)器人 原裝電話機(jī)器人 清遠(yuǎn)360地圖標(biāo)注方法 平頂山外呼系統(tǒng)免費(fèi) 江蘇客服外呼系統(tǒng)廠家 西藏智能外呼系統(tǒng)五星服務(wù) 在哪里辦理400電話號(hào)碼

好幾個(gè)月沒(méi)有寫(xiě)筆記了, 并非沒(méi)有積累, 而是有點(diǎn)懶了. 想想還是要續(xù)上, 作為工作成長(zhǎng)的一部分哦.

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

總體解決方案

輸出報(bào)表

當(dāng)然是測(cè)試用的假數(shù)據(jù)啦.

自動(dòng)化Py腳本

基本思路:
1. 準(zhǔn)備模板數(shù)據(jù)需要的 SQL
2. 用 Pandas 連接 數(shù)據(jù)庫(kù) 并執(zhí)行 SQL, 返回 DataFrame
3. 用 Xlwings 直接打開(kāi) Excel, 并將這些 DataFrame 填充到 寫(xiě)死的 單元格
4. 保存并退出

具體代碼如下哦:

import pandas as pd 
import xlwings as xw
import pymssql


# 各品類(lèi)月同期 
def get_last_year_sale(start_date, end_date):
  """各品類(lèi)同期銷(xiāo)量, 對(duì)比19年"""
  sql_01 = f"""
  SELECT 
   品類(lèi)
   , SUM(數(shù)量) AS QTY
  FROM XXX
  WHERE 是否電商 = 1 
   AND 銷(xiāo)售時(shí)間 BETWEEN DATEADD(YEAR, -2, '{start_date}') AND DATEADD(YEAR, -2, '{end_date}')   
  GROUP BY 品類(lèi)
  """
  df = pd.read_sql(sql_01, con=con)
  df_xtc = df[df['品類(lèi)'] == 'A品類(lèi)'][['品類(lèi)', 'QTY']]
  df_bbk = df[df['品類(lèi)'] == 'B品類(lèi)'][['品類(lèi)', 'QTY']]
  return df_xtc, df_bbk 
  
def get_anget_sale(start_date, end_date):
    """返回各品類(lèi), 各區(qū)域的時(shí)間段銷(xiāo)量"""
    sql = f"""
    SELECT 
     品類(lèi)
     , AGENT
     , SUM(數(shù)量) AS QTY
     , ROW_NUMBER()OVER(PARTITION BY 品類(lèi) ORDER BY SUM(數(shù)量) DESC) MY_RANK
    FROM XXX
    WHERE 是否電商 = 1 
     AND 銷(xiāo)售時(shí)間 BETWEEN '{start_date}' AND '{end_date}'
    GROUP BY AGENT, 品類(lèi)
    """
    df = pd.read_sql(sql, con=con)
    df_xtc = df[df['品類(lèi)'] == 'A品類(lèi)'][['AGENT', 'QTY']]
    df_bbk = df[df['品類(lèi)'] == 'B品類(lèi)'][['AGENT', 'QTY']]
    df_pad = df[df['品類(lèi)'] == 'C品類(lèi)'][['AGENT', 'QTY']]

    return df_xtc, df_bbk, df_pad 
  
def get_machine_sale(start_date, end_date):
  """返回各品類(lèi), 各區(qū)域的時(shí)間段銷(xiāo)量"""
  sql = f"""
  SELECT 
   品類(lèi)
   , 機(jī)型
   , SUM(數(shù)量) AS QTY
   , ROW_NUMBER()OVER(PARTITION BY 品類(lèi) ORDER BY SUM(數(shù)量) DESC) MY_RANK
  FROM V_REALSALE
  WHERE 是否電商 = 1 
   AND 銷(xiāo)售時(shí)間 BETWEEN '{start_date}' AND '{end_date}'
  GROUP BY 機(jī)型, 品類(lèi)
  """
  df = pd.read_sql(sql, con=con)
  df_xtc = df[df['品類(lèi)'] == 'A品類(lèi)'][['機(jī)型', 'QTY']]
  df_bbk = df[df['品類(lèi)'] == 'B品類(lèi)'][['機(jī)型', 'QTY']]

  return df_xtc, df_bbk 


# main 
con = pymssql.connect('xxxxx', 'sxxx', 'xxxxxx', 'xxxxx')

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

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

if len(today.split('/')) != 3:
  raise "日期格式輸入錯(cuò)誤!!, 請(qǐng)按照形如 '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("正在開(kāi)始更新....")
print("提示, 接下看到閃退, 是正?,F(xiàn)象, 就程序模擬人去打開(kāi)文件, 填充數(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)

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

# 各地區(qū)當(dāng)季度銷(xiāo)量 
df_q_xtc, df_q_bbk, df_q_pad = get_anget_sale(q_time_start, today)

# 各機(jī)型當(dāng)季度銷(xiāo)量 
df_q_type_xtc, df_q_type_bbk = get_machine_sale(q_time_start, today) 
# 過(guò)濾掉 銷(xiāo)量為0的型號(hào) 
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]

# 打開(kāi)excel 模板 等待數(shù)據(jù)填充 
app = xw.App(visible=True, add_book=False)

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

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

# 19年當(dāng)月同期銷(xiāo)量
data_sht.range('B9').value = df_mm_xtc.values
data_sht.range('G9').value = df_mm_bbk.values

# 當(dāng)季度同比
data_sht.range('B10').value = df_qq_xtc.values
data_sht.range('G10').value = df_qq_bbk.values

# 填充各品類(lèi)當(dāng)月銷(xiāo)量, 注意單元格是寫(xiě)死的哦
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

# 填充當(dāng)季度銷(xiāo)量, 同理是寫(xiě)死的
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

# 填充當(dāng)季度各型號(hào), 同理是寫(xiě)死的
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("請(qǐng)按任意鍵退出~~")
print()
print('BYE~~ 人生若只如初見(jiàn)呢~~')

打包 EXE 桌面小程序

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

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

然后進(jìn)入腳本目錄下, 進(jìn)行打包哦.

pyinstaller main.py -F

打包成功后的樣子.

雙擊運(yùn)行即可哦.

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

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

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

您可能感興趣的文章:
  • python辦公自動(dòng)化之excel的操作
  • 使用Python自動(dòng)化Microsoft Excel和Word的操作方法
  • 基于Python的接口自動(dòng)化讀寫(xiě)excel文件的方法
  • Python+unittest+requests+excel實(shí)現(xiàn)接口自動(dòng)化測(cè)試框架
  • python+excel接口自動(dòng)化獲取token并作為請(qǐng)求參數(shù)進(jìn)行傳參操作
  • python實(shí)現(xiàn)自動(dòng)化報(bào)表功能(Oracle/plsql/Excel/多線程)
  • Python3+Requests+Excel完整接口自動(dòng)化測(cè)試框架的實(shí)現(xiàn)
  • 基于python實(shí)現(xiàn)自動(dòng)化辦公學(xué)習(xí)筆記(CSV、word、Excel、PPT)
  • Python辦公自動(dòng)化之Excel(中)

標(biāo)簽:西安 天水 日照 隨州 錦州 白城 股票 安慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟》,本文關(guān)鍵詞  Python,實(shí)現(xiàn),自動(dòng)化,Excel,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章