Python 自動化辦公:Excel 數據處理的“秘密武器”

引言

????????在日常的 IT 辦公場景里,Excel 是數據處理與分析的 “常勝將軍”。無論是財務人員整理賬目、銷售團隊統計業績,還是運營人員分析用戶數據,Excel 都發揮著關鍵作用。但面對海量數據,手動操作 Excel 不僅效率低下,還容易出錯。Python 憑借其強大的庫支持,能輕松實現 Excel 自動化處理,讓繁瑣的工作變得簡單高效。本文將結合實際案例,帶大家走進 Python 自動化操作 Excel 的世界,掌握實用的代碼技巧。


1 常用 Python 庫介紹

1.1 openpyxl

????????openpyxl 是一個用于讀寫 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 庫。它功能豐富,支持對單元格的讀寫、格式設置、圖表操作等,適合處理較為復雜的Excel文件。

1.2 pandas

????????pandas 是數據分析領域的明星庫,它提供了高效的數據結構和數據分析工具。雖然它本身不直接操作 Excel 文件格式,但通過 to_excel() 和 read_excel() 方法,可以方便地與 Excel 進行數據交互,常用于數據的快速讀寫和初步處理。

1.3 xlrd/xlwt(較老但仍有使用場景)

????????xlrd 用于讀取 Excel 文件(支持 .xls 格式),xlwt 用于寫入 Excel 文件(同樣支持 .xls 格式)。由于它們對 .xlsx 格式支持有限,在新項目中使用頻率逐漸降低,但在處理老舊格式的 Excel 文件時仍有一定價值。


2 實戰案例:銷售數據自動化處理

2.1 案例背景

????????假設我們有一份某公司某月的銷售數據 Excel 文件(sales_data.xlsx),包含銷售日期、產品名稱、銷售數量、銷售單價等信息。我們的任務是自動化完成以下工作:

  1. 讀取 Excel 文件中的數據。
  2. 計算每筆訂單的銷售金額(銷售數量×銷售單價)。
  3. 統計每種產品的總銷售金額。
  4. 將處理后的數據保存到新的 Excel 文件中,并對總銷售金額進行降序排序。

2.2 代碼實現

1. 準備工作

????????首先,確保已安裝所需庫,可通過以下命令安裝:

pip install openpyxl pandas

2. 完整代碼

import pandas as pd
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, Alignmentdef process_sales_data():# 1. 讀取Excel文件input_file = 'sales_data.xlsx'df = pd.read_excel(input_file)# 2. 計算每筆訂單的銷售金額df['銷售金額'] = df['銷售數量'] * df['銷售單價']# 3. 統計每種產品的總銷售金額product_sales = df.groupby('產品名稱')['銷售金額'].sum().reset_index()product_sales = product_sales.sort_values(by='銷售金額', ascending=False)# 4. 將處理后的數據保存到新的Excel文件output_file = 'processed_sales_data.xlsx'with pd.ExcelWriter(output_file, engine='openpyxl') as writer:# 寫入原始數據(帶計算的銷售金額)df.to_excel(writer, sheet_name='原始數據', index=False)# 寫入產品總銷售金額統計結果product_sales.to_excel(writer, sheet_name='產品統計', index=False)# 5. 使用openpyxl對輸出的Excel文件進行格式美化(可選)wb = load_workbook(output_file)# 美化“原始數據”工作表ws_raw = wb['原始數據']# 設置標題行字體加粗、居中for cell in ws_raw[1]:cell.font = Font(bold=True)cell.alignment = Alignment(horizontal='center')# 美化“產品統計”工作表ws_stats = wb['產品統計']# 設置標題行字體加粗、居中for cell in ws_stats[1]:cell.font = Font(bold=True)cell.alignment = Alignment(horizontal='center')# 為總銷售金額列添加貨幣格式(示例,實際可能需要根據Excel版本調整)for row in range(2, ws_stats.max_row + 1):ws_stats.cell(row=row, column=2).number_format = '"¥"#,##0.00'# 保存美化后的文件wb.save(output_file)print(f"數據處理完成,結果已保存到 {output_file}")if __name__ == '__main__':process_sales_data()

代碼解析:

  1. 數據讀取:使用 pandas.read_excel() 函數讀取 sales_data.xlsx 文件中的數據到 DataFrame 對象 df 中。
  2. 計算銷售金額:通過 DataFrame 的列運算,直接在 df 中新增一列“銷售金額”,其值為“銷售數量”與“銷售單價”的乘積。
  3. 統計產品總銷售金額:利用 groupby() 方法按“產品名稱”分組,然后對“銷售金額”列求和,并使用 sort_values() 方法按總銷售金額降序排序。
  4. 數據寫入:使用 pandas.ExcelWriter 將處理后的數據分別寫入新 Excel 文件的不同工作表中。
  5. 格式美化:使用 openpyxl 加載生成的 Excel 文件,對工作表進行格式設置,如設置標題行字體加粗、居中,為金額列添加貨幣格式等,使輸出結果更加美觀易讀。

3 擴展應用場景

3.1 批量處理多個 Excel 文件

????????假設公司有多個銷售分公司的 Excel 數據文件,文件命名格式為分公司名稱 _sales_data.xlsx,我們可以編寫代碼批量處理這些文件,并將結果合并到一個 Excel 文件中。

import os
import pandas as pddef batch_process_sales_files():input_folder = 'sales_files'  # 假設所有分公司銷售數據文件都在此文件夾中output_file = 'all_companies_sales_summary.xlsx'all_data = []# 遍歷文件夾中的所有Excel文件for filename in os.listdir(input_folder):if filename.endswith('_sales_data.xlsx'):company_name = filename.split('_')[0]  # 提取分公司名稱file_path = os.path.join(input_folder, filename)df = pd.read_excel(file_path)df['分公司'] = company_name  # 添加分公司列all_data.append(df)# 合并所有數據combined_df = pd.concat(all_data, ignore_index=True)# 計算每筆訂單銷售金額combined_df['銷售金額'] = combined_df['銷售數量'] * combined_df['銷售單價']# 統計各分公司各產品總銷售金額company_product_sales = combined_df.groupby(['分公司', '產品名稱'])['銷售金額'].sum().reset_index()company_product_sales = company_product_sales.sort_values(by=['分公司', '銷售金額'], ascending=[True, False])# 保存結果with pd.ExcelWriter(output_file, engine='openpyxl') as writer:combined_df.to_excel(writer, sheet_name='原始合并數據', index=False)company_product_sales.to_excel(writer, sheet_name='分公司產品統計', index=False)print(f"批量處理完成,結果已保存到 {output_file}")if __name__ == '__main__':batch_process_sales_files()

3.2 定時自動生成報表

????????在辦公場景里,日報、周報、月報的生成與分發如同每日打卡,是不可或缺的工作環節。但手動重復操作不僅耗時,還容易因忙碌而遺漏。借助操作系統的定時任務功能與 Python 腳本,我們能讓報表在指定時間自動“出爐”,并精準送達相關人員手中,大幅提升辦公效率。

3.2.1 定時任務工具選擇

????????不同操作系統提供了各具特色的定時任務工具,能無縫銜接 Python 腳本,實現自動化報表生成。

  • Windows:“任務計劃程序”是 Windows 系統的內置利器,通過直觀的圖形界面,可輕松設置腳本的定時運行。
  • Linux/Mac:cron 服務以簡潔高效的命令行方式,靈活管理定時任務,滿足多樣化的定時需求。

3.2.2?典型應用場景:銷售日報自動生成與發送

????????假設公司要求每天早上 9 點,將前一天的銷售數據匯總成日報,并發送給銷售團隊和管理層。下面介紹如何借助 Python 腳本與定時任務工具實現這一需求。

import pandas as pd
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from datetime import datetime, timedeltadef generate_and_send_daily_report():# 1. 獲取前一天日期yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')# 2. 模擬生成銷售數據(實際項目中可連接數據庫獲取)data = {'產品名稱': ['產品A', '產品B', '產品C'],'銷售數量': [120, 85, 95],'銷售單價': [50, 80, 60]}df = pd.DataFrame(data)df['銷售金額'] = df['銷售數量'] * df['銷售單價']# 3. 計算總銷售額total_sales = df['銷售金額'].sum()# 4. 保存報表到Excelreport_filename = f'daily_sales_report_{yesterday}.xlsx'with pd.ExcelWriter(report_filename, engine='openpyxl') as writer:df.to_excel(writer, sheet_name='銷售明細', index=False)# 添加總銷售額到新工作表summary_df = pd.DataFrame({'統計項': ['總銷售額'], '金額': [total_sales]})summary_df.to_excel(writer, sheet_name='統計匯總', index=False)# 5. 發送郵件send_email(report_filename, yesterday)def send_email(file_path, report_date):# 郵件配置sender = 'your_email@example.com'  # 發送者郵箱password = 'your_password_or_app_token'  # 郵箱密碼或應用專用密碼/授權碼receiver = 'sales_team@example.com'  # 接收者郵箱smtp_server = 'smtp.example.com'  # SMTP服務器地址(如Gmail為smtp.gmail.com)smtp_port = 587  # SMTP服務器端口# 創建郵件對象msg = MIMEMultipart()msg['From'] = sendermsg['To'] = receivermsg['Subject'] = f'{report_date}銷售日報'# 郵件正文body = f"""<h2>各位同事:</h2><p>以下是{report_date}的銷售日報,請查收。</p><p>附件包含詳細的銷售明細和統計匯總信息。</p><br><p>銷售部</p><p>{datetime.now().strftime('%Y-%m-%d')}</p>"""msg.attach(MIMEText(body, 'html'))# 添加附件with open(file_path, 'rb') as f:part = MIMEApplication(f.read())part.add_header('Content-Disposition', 'attachment', filename=file_path)msg.attach(part)# 發送郵件try:with smtplib.SMTP(smtp_server, smtp_port) as server:server.starttls()  # 啟用加密連接server.login(sender, password)server.send_message(msg)print(f"郵件發送成功,報表已發送至 {receiver}")except Exception as e:print(f"郵件發送失敗: {e}")if __name__ == '__main__':generate_and_send_daily_report()

腳本功能解析:

  • 數據生成:模擬生成前一天的銷售數據,包括產品名稱、銷售數量、銷售單價,并計算銷售金額和總銷售額。
  • 報表生成:使用 pandas 將數據保存到 Excel 文件中,創建“銷售明細”和“統計匯總”兩個工作表,分別展示詳細銷售數據和總銷售額。
  • 郵件發送:通過 smtplib 和 email 庫構建并發送郵件,將生成的 Excel 文件作為附件發送給指定人員。

3.2.3 定時任務設置

Windows 系統:

  1. 打開任務計劃程序:按下 Win + R 鍵,輸入 taskschd.msc 并回車。
  2. 創建基本任務:在右側操作面板中點擊“創建基本任務”。
  3. 填寫基本信息:輸入任務名稱(如“每日銷售日報發送”)和描述。
  4. 設置觸發器:選擇“每天”,設置開始時間為 9:00,并選擇“每天”重復執行。
  5. 設置操作:選擇“啟動程序”,瀏覽并選擇 Python 解釋器路徑(如 C:\Python39\python.exe)和腳本路徑(如 C:\scripts\generate_and_send_daily_report.py)。
  6. 完成設置:點擊“完成”按鈕,任務計劃程序將每天 9 點自動運行腳本。

Linux/Mac 系統

????????編輯 crontab 文件:在終端輸入 crontab -e 命令。

????????添加定時任務:在打開的編輯器中添加以下行,設置每天 9 點運行腳本:

0 9 * * * /usr/bin/python3 /path/to/generate_and_send_daily_report.py
  • 0 9 * * *:表示每天 9:00 執行任務。
  • /usr/bin/python3:Python 解釋器的路徑,可通過?which python3?命令查找。
  • /path/to/generate_and_send_daily_report.py:Python 腳本的絕對路徑。

????????保存并退出:保存文件后,cron?服務將自動加載新的定時任務。

3.2.4 注意事項

  • 郵箱安全:為保障郵箱安全,建議使用應用專用密碼或授權碼進行 SMTP 登錄,而非直接使用郵箱密碼。
  • 路徑問題:在腳本中使用絕對路徑引用文件,避免因工作目錄不同而導致文件找不到。
  • 日志記錄:在腳本中添加日志記錄功能,將腳本的運行情況和錯誤信息記錄到日志文件中,方便排查問題。例如,使用 logging 模塊記錄日志:
import logging# 配置日志記錄
logging.basicConfig(filename='report_generation.log', level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')def generate_and_send_daily_report():try:logging.info("開始生成銷售日報")# 原有代碼...logging.info("銷售日報生成并發送成功")except Exception as e:logging.error(f"生成銷售日報時出錯: {e}")

????????通過以上方法,我們可以輕松實現銷售日報的定時自動生成與發送,讓辦公自動化為我們的工作減負增效。同樣的思路也可應用于周報、月報等其他報表的定時生成與分發。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77497.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

緩存集群技術深度解析:從原理到實戰

緩存集群技術深度解析&#xff1a;從原理到實戰 一、緩存集群核心定位與架構選型 1. 集群模式核心價值 緩存集群通過數據分片、高可用保障、水平擴展解決單節點瓶頸&#xff0c;核心能力包括&#xff1a; 數據分片&#xff1a;將數據分散到多個節點&#xff0c;突破單節點內…

CSDN編輯文章時如何自動生成目錄

如何自動生成目錄 前置條件1. 插入目錄標識符2. 編寫標題層級 前置條件 需要使用markdown編輯&#xff0c;并且只有按照markdown語法編寫不同的標題級別&#xff0c;才能使用這個方法自動生成對應的目錄。 1. 插入目錄標識符 在文章的頂部添加以下代碼&#xff1a; [TOC](文…

產品經理對于電商接口的梳理||電商接口文檔梳理與接入

接口梳理7個注意點總結 ①注意要測試環境和生產環境。生產上線時候要提醒研發換到生產環境調用。 ②注意必輸字段和選輸字段&#xff0c;要傳入字段的含義和校驗。枚舉值不清楚含義的要詢問對方含義&#xff0c;比如說單據類型字段枚舉值是B2C發貨單&#xff0c;BBC發貨單&am…

更快的圖像局部修改與可控生成:Flex.2-preview

Flex.2-preview 文本生成圖像擴散模型介紹 一、模型簡介 Flex.2-preview 是一種 開源的 80 億參數文本生成圖像擴散模型&#xff0c;具備通用控制和修復支持功能&#xff0c;是 Flex.1alpha 的下一代版本。該模型由社區開發并為社區服務&#xff0c;采用 Apache 2.0 許可證&a…

【Castle-X機器人】一、模塊安裝與調試:機器人底盤

持續更新。。。。。。。。。。。。。。。 【ROS機器人】模塊安裝 一、Castle-X機器人底盤1.1 結構概述1.2 驅動執行結構1.3 環境傳感器1.4 電氣系統1.5 Castle-x機器人底盤測試激光雷達傳感器測試及數據可視化超聲波傳感器實時數據獲取防跌落傳感器測試陀螺儀測試鍵盤控制測試…

條件、列表渲染.

#### v-for 1. 渲染列表 vue <template> <ul v-for"(item,index) in list" > <li>{{ item }}</li> </ul> </template> <script setup> import { ref } from vue; let list ref([蘋果, 香蕉, 橙子]) </script>…

node20的安裝和vue的入門準備

一、node20的安裝 直接下載路徑&#xff1a;https://nodejs.org/download/release/v20.11.0/node-v20.11.0-x64.msi 安裝&#xff0c;雙擊msi文件 點擊同意協議 更改下載路徑 什么也不用選&#xff0c;點擊next進行下一步 什么也不用選&#xff0c;點擊next進行下一步 點擊安…

從 Java 到 Kotlin:在現有項目中遷移的最佳實踐!

全文目錄&#xff1a; 開篇語 1. 為什么選擇 Kotlin&#xff1f;1.1 Kotlin 與 Java 的兼容性1.2 Kotlin 的優勢1.3 Kotlin 的挑戰 2. Kotlin 遷移最佳實踐2.1 漸進式遷移2.1.1 步驟一&#xff1a;將 Kotlin 集成到現有的構建工具中2.1.2 步驟二&#xff1a;逐步遷移2.1.3 步驟…

威雅利電子|業界領先的高隔離度用于5G基站的吸收式SPDT開關“NT1819“

業界領先的高隔離度 用于5G基站的吸收式SPDT開關"NT1819" 為了實現智能社會&#xff0c;已經啟動了5G服務。這樣&#xff0c;高速、低延遲、大容量的數據通信成為可能&#xff0c;也給我們的生活和工業發展帶來了巨大的變化。 在5G基站有很多天線&#xff0c;每個天…

Diamond軟件的使用--(6)訪問FPGA的專用SPI接口

1.什么是FPGA的專用SPI接口&#xff1f; 此處的SPI FLASH接口即為FPGA的專用SPI接口&#xff0c;上電時&#xff0c;FPGA從該FLASH讀出程序并運行。 2.訪問SPI PROM需要注意哪些地方&#xff1f; 1&#xff09;處于MASTER SPI MODE 2&#xff09;調用USRMCLK原語&#xff0c;…

Go 語言中的 `select` 語句詳解

select 是 Go 語言中處理通道(Channel)操作的一個強大控制結構&#xff0c;它允許 goroutine 同時等待多個通道操作。下面我將全面詳細地解釋 select 語句的各個方面。 基本語法 select 語句的基本語法如下&#xff1a; select { case <-ch1:// 如果從 ch1 成功接收數據&…

AI如何重塑CC防護行業?五大變革與實戰策略解析

一、CC防護行業的技術痛點與AI的破局方向 CC攻擊&#xff08;Challenge Collapsar&#xff09;作為一種以高頻合法請求消耗服務器資源的DDoS攻擊手段&#xff0c;傳統防護技術面臨三大核心挑戰&#xff1a; 規則依賴性強&#xff1a;基于IP封禁或請求頻率的靜態規則易被繞過&a…

GPT-4o最新圖像生成完全指南:10大應用場景與提示詞模板

引言 OpenAI于近期推出的全新GPT-4o圖像生成功能&#xff0c;代表了AI圖像創作領域的重大突破。作為一個原生多模態系統&#xff0c;GPT-4o將文本理解和圖像生成無縫整合&#xff0c;為創作者、教育工作者和專業人士提供了前所未有的視覺創作靈活性。本文將分享10個GPT-4o圖像…

Linux驅動開發2 - 內核定時器驅動

背景 所有驅動開發都是基于全志T507&#xff08;Android 10&#xff09;進行開發&#xff0c;用于記錄驅動開發過程。 簡介 定時器是比較常用的一個功能&#xff0c;用來執行周期性任務。一般不太精確的定時可以用系統提供的延時函數進行。如果需要進行較為精確的延時&#…

Dify 使用 excel 或者 csv 文件創建知識庫

Dify 使用 excel 或者 csv 文件創建知識庫 1. 創建知識庫2. 創建聊天助手3. 其他 1. 創建知識庫 創建知識庫&#xff0c;導入excel/csv文件&#xff0c; 文件內容&#xff0c; 單擊 “預覽塊”&#xff0c;可以確認會生成多個鍵值對的塊&#xff0c; 配置 Embedding 模型和檢索…

23種設計模式-行為型模式之迭代器模式(Java版本)

Java 迭代器模式&#xff08;Iterator Pattern&#xff09;詳解 &#x1f9e0; 什么是迭代器模式&#xff1f; 迭代器模式是一種行為型設計模式&#xff0c;它提供一種方法順序訪問一個聚合對象中的各個元素&#xff0c;而不暴露該對象的內部表示。 &#x1f3af; 使用場景 …

使用nodeJs的express+axios+cors做代理

使用nodeJs的expressaxioscors做代理 前端在請求后端時通常會遇到跨域cors問題&#xff0c;如果只在本地開發可以通過webpack或vite的proxy設置。但如果需要在線上或者其他地方繞過跨域&#xff0c;可以使用代理的方法。 1. 創建文件夾 并創建以下文件 package.json {"…

T檢驗、F檢驗及樣本容量計算學習總結

目錄 〇、碎語一、假設檢驗1.1 兩種錯誤1.2 z檢驗和t檢驗1.3 t檢驗1.3.1 單樣本t檢驗1.3.2 配對樣本t檢驗1.3.3 獨立樣本t檢驗1.4 方差齊性檢驗1.4 卡方檢驗二、樣本容量的計算2.1 AB測試主要的兩種應用場景2.2 絕對量的計算公式2.3 率的計算公式參考資料〇、碎語 聽到最多的檢…

tensorflow使用詳解

一、TensorFlow基礎環境搭建 安裝與驗證 # 安裝CPU版本 pip install tensorflow# 安裝GPU版本&#xff08;需CUDA 11.x和cuDNN 8.x&#xff09; pip install tensorflow-gpu# 驗證安裝 python -c "import tensorflow as tf; print(tf.__version__)"核心概念 Tensor…

Redis的阻塞

Redis的阻塞 Redis的阻塞問題主要分為內在原因和外在原因兩大類&#xff0c;以下從這兩個維度展開分析&#xff1a; 一、內在原因 1. 不合理使用API或數據結構 Redis 慢查詢 Redis 慢查詢的界定 定義&#xff1a;Redis 慢查詢指命令執行時間超過預設閾值&#xff08;默認 10m…