Python 辦公自動化實戰:Excel 批量處理 + 自動發郵件

Python 辦公自動化實戰:Excel 批量處理 + 自動發郵件

關鍵詞: Python辦公自動化 ? Pandas ? OpenPyXL ? Email ? 定時任務

摘要: 每月底還在手動處理幾十份Excel報表并郵件發送?快來學習如何用Python全自動完成!本文將手把手教你如何用Python自動合并處理Excel數據,并一鍵發送給領導,徹底解放雙手,效率提升1000%!

一、 場景與需求:告別“表哥”“表姐”的噩夢

二、 技術棧與工具

  • Python 3.6+
  • Pandas: 數據處理的核心庫,用于讀取、合并Excel。
  • OpenPyXL / XLsxWriter: 用于讀寫Excel文件。
  • smtplib & email: Python內置庫,用于發送郵件。
  • schedule (可選): 輕量級的定時任務庫。

三、 實現步驟

步驟 1:安裝必要的庫

在開始之前,請確保通過pip安裝了以下庫:

pip install pandas openpyxl schedule

步驟 2:準備環境 & 配置文件

創建一個項目文件夾,例如 auto_excel_email。

在該文件夾內,再創建一個 reports 文件夾,用于存放所有待處理的部門Excel文件。

創建一個 config.py 文件,用于存放敏感的郵箱配置信息(重要:避免將密碼上傳至Git等平臺)。

config.py 內容如下:

# config.py
# 郵箱服務器配置 - 以QQ郵箱為例,其他郵箱請自行查找SMTP服務器地址和端口
SMTP_SERVER = "smtp.qq.com"
SMTP_PORT = 465  # QQ郵箱的SSL端口# 發件人郵箱地址和授權碼(注意:不是登錄密碼,是SMTP服務授權碼)
SENDER_EMAIL = "your_email@qq.com"
SENDER_PASSWORD = "your_authorization_code" # 這里填你的SMTP授權碼# 收件人郵箱地址,可以是多個
RECIPIENTS = ["leader1@company.com", "colleague@company.com"]

?? 如何獲取SMTP授權碼?

QQ郵箱:設置 -> 賬戶 -> 開啟POP3/SMTP服務 -> 生成授權碼。

163郵箱:設置 -> POP3/SMTP/IMAP -> 開啟服務 -> 生成授權碼。

公司郵箱:請聯系IT部門。

步驟 3:編寫核心代碼 - Excel批量處理

創建一個名為 main.py 的文件。

# main.py
import pandas as pd
import os
from datetime import datetime
from config import *  # 導入配置文件中的變量def merge_excel_reports(folder_path):"""自動合并指定文件夾下的所有Excel文件:param folder_path: 存放Excel文件的文件夾路徑:return: 合并后的DataFrame,以及輸出文件的路徑"""print("開始合并Excel文件...")all_data = []# 遍歷文件夾中的所有文件for file_name in os.listdir(folder_path):if file_name.endswith(('.xlsx', '.xls')): # 支持.xlsx和.xls格式file_path = os.path.join(folder_path, file_name)try:# 讀取Excel文件df = pd.read_excel(file_path)# 添加一列“數據來源”,記錄原始文件名df['數據來源'] = file_name# 將DataFrame添加到列表all_data.append(df)print(f"成功讀取文件: {file_name}")except Exception as e:print(f"讀取文件 {file_name} 時出錯: {str(e)}")if not all_data:print("未找到任何Excel文件,請檢查路徑!")return None, None# 合并所有DataFramemerged_df = pd.concat(all_data, axis=0, ignore_index=True)# 生成輸出文件名,包含當前日期today_str = datetime.now().strftime("%Y%m%d")output_filename = f"銷售匯總報表_{today_str}.xlsx"output_path = os.path.join(os.getcwd(), output_filename)# 保存合并后的數據到新Excel文件try:merged_df.to_excel(output_path, index=False, engine='openpyxl')print(f"合并完成!文件已保存為: {output_filename}")return merged_df, output_pathexcept Exception as e:print(f"保存文件時出錯: {str(e)}")return None, None# 測試一下合并功能
if __name__ == "__main__":report_folder = "./reports"  # 報表存放的文件夾merged_data, output_file_path = merge_excel_reports(report_folder)

步驟 4:編寫核心代碼 - 自動發送郵件

在 main.py 中繼續添加以下函數:

# main.py (續)
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplicationdef send_email_with_attachment(subject, body, to_email, attachment_path):"""發送帶附件的郵件:param subject: 郵件主題:param body: 郵件正文:param to_email: 收件人列表:param attachment_path: 附件路徑"""# 創建郵件對象msg = MIMEMultipart()msg['From'] = SENDER_EMAILmsg['To'] = ", ".join(to_email) # 多個收件人用逗號分隔msg['Subject'] = subject# 添加郵件正文msg.attach(MIMEText(body, 'plain', 'utf-8'))# 添加附件if attachment_path:try:with open(attachment_path, "rb") as f:part = MIMEApplication(f.read())part.add_header('Content-Disposition', 'attachment', filename=os.path.basename(attachment_path))msg.attach(part)print(f"附件 {os.path.basename(attachment_path)} 添加成功。")except Exception as e:print(f"添加附件時出錯: {str(e)}")return False# 連接服務器并發送郵件try:# 使用SSL加密連接server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)server.login(SENDER_EMAIL, SENDER_PASSWORD)server.sendmail(SENDER_EMAIL, to_email, msg.as_string())server.quit()print("郵件發送成功!")return Trueexcept Exception as e:print(f"郵件發送失敗: {str(e)}")return False

步驟 5:整合主流程并添加定時任務

在 main.py 的最后,添加主函數和定時任務邏輯:

# main.py (續)
import schedule
import timedef main_job():"""主任務函數:合并Excel并發送郵件"""print(f"\n--- 開始執行月度報表自動化任務 {datetime.now()} ---")# 1. 合并Excelreport_folder = "./reports"merged_data, output_file_path = merge_excel_reports(report_folder)if output_file_path:# 2. 準備郵件內容today_chinese = datetime.now().strftime("%Y年%m月%d日")email_subject = f【月度銷售匯總報告】{today_chinese}email_body = f"""
尊敬的領導:您好!本郵件由Python機器人自動發送。附件是{today_chinese}的各部門銷售數據匯總報告,由系統自動合并生成,請查收。共計合并了 {len(merged_data['數據來源'].unique())} 個部門的數據,總數據量 {len(merged_data)} 條。祝好!"""# 3. 發送郵件send_email_with_attachment(email_subject, email_body, RECIPIENTS, output_file_path)print("--- 本次任務執行完畢 ---\n")# 如果是直接運行,立即執行一次
if __name__ == "__main__":main_job() # 手動執行一次# --- 可選:設置定時任務 ---# 例如,每月1號早上9點自動執行# schedule.every().month.at("09:00").do(main_job)# 或者每周一早上9點執行# schedule.every().monday.at("09:00").do(main_job)# print("定時任務已啟動,程序將持續運行...")# while True:#     schedule.run_pending()#     time.sleep(60) # 每分鐘檢查一次

四、 如何使用?

  • 1、準備數據:將各部門的Excel報表放入項目下的 reports 文件夾。 **

  • 2、配置郵箱:修改 config.py 文件,填入正確的發件人郵箱和授權碼、收件人郵箱。 **

  • **3、運行腳本:在終端執行 python main.py。 **

  • **4、查看結果:腳本會自動生成一個帶日期的總表文件,并發送郵件。查看你的收件箱吧! **

五、 總結與擴展

本項目實現了一個完整的辦公自動化流程。你可以在此基礎上進行擴展:

  • 數據清洗:在 merge_excel_reports 函數中,對讀取的每個DataFrame進行數據清洗(如去重、填充空值等)。

  • 生成圖表:使用 matplotlib 庫在合并后自動生成統計圖表,并插入Excel中。

  • Web可視化:使用 Flask 或 Streamlit 搭建一個簡單的內部網頁,用于上傳文件和查看報告。

  • 異常告警:如果任務執行失敗,自動發送一封告警郵件給自己。

自動化不是為了取代工作,而是為了讓我們從重復勞動中解放出來,去進行更深入的思考和決策。希望這個腳本能成為你職場中的得力助手!

💡 如果文章對你有幫助,記得 點贊 + 收藏 + 評論,我會持續分享更多 Python 辦公自動化實戰案例!

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

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

相關文章

高教杯數學建模2021-C 生產企業原材料的訂購與運輸

某建筑和裝飾板材的生產企業所用原材料主要是木質纖維和其他植物素纖維材料, 總體可分為 A,B,C 三種類型。該企業每年按 48 周安排生產,需要提前制定 24 周的原 材料訂購和轉運計劃,即根據產能要求確定需要訂購的原材料供應商&…

【Python系列】Flask 和 FastAPI對比

博客目錄1. 類型和設計目標2. 性能3. 異步支持4. 數據驗證和文檔5. 學習曲線和生態6. 使用場景示例對比Flask(同步)FastAPI(異步)總結Flask 和 FastAPI 都是 Python 中流行的 Web 框架,但它們的設計目標、特性和適用場…

把 AI 塞進「空調遙控器」——基于 MEMS 溫濕陣列的 1 分鐘極速房間熱場掃描

標簽:MEMS 陣列、熱場掃描、極速空調、TinyML、RISC-V、零樣本、離線推理、節能 ---- 背景:為什么空調遙控器要「畫圖」? 傳統空調只有一個溫濕度探頭,經常“東邊冷、西邊熱”。 ? 大客廳 30 ㎡,溫差 5 ℃&#xff1…

【機器學習】8 Logistic regression

本章目錄 8 Logistic regression 245 8.1 Introduction 245 8.2 Model specification 245 8.3 Model fitting 245 8.3.1 MLE 246 8.3.2 Steepest descent 247 8.3.3 Newton’s method 249 8.3.4 Iteratively reweighted least squares (IRLS) 250 8.3.5 Quasi-Newton (variabl…

C++中如何使用互斥(1)------std::lock_guard

操作系統:ubuntu22.04 IDE:Visual Studio Code 編程語言:C11 算法描述 std::lock_guard 是 C11 引入的一個 RAII(Resource Acquisition Is Initialization)風格的鎖管理類,用于自動管理互斥鎖(mutex&#x…

AI算力提升7.5倍!英偉達發布新一代機器人超級計算機Jetson Thor,驅動物理AI革命

今天,NVIDIA 宣布其專為物理 AI 和機器人打造的新一代機器人計算機 Jetson Thor 正式發售。其中,Jetson AGX Thor 開發者套件售價為 3499 美元(約合人民幣 2.5 萬元)。NVIDIA 創始人兼首席執行官黃仁勛表示:“Jetson T…

【數學建模】如何總結數學建模中的層次分析法最好

模型簡介模型名稱:層次分析法核心問題類型:評價類核心思想和適用場景 核心思想:將大決策問題拆解成小比較問題,通過數學計算綜合最終結論:本質是人的主觀判斷轉換為客觀數據的工具[[適用場景]] 個人決策企業 / 項目決策…

`mmap` 系統調用詳解

mmap 是 Unix/Linux 系統中一個強大且多用途的系統調用,用于將文件或設備映射到進程的地址空間,實現內存映射I/O。 1. 函數的概念與用途 mmap(內存映射)函數允許程序將文件或其他對象直接映射到其地址空間,這樣文件內容…

深度剖析Spring AI源碼(二):Model抽象層 - “馴服”天下AI的“緊箍咒”

深度剖析Spring AI源碼(二):Model抽象層 - “馴服”天下AI的“緊箍咒”上一章我們鳥瞰了Spring AI的宏偉藍圖,今天,我們要深入這座大廈的基石——Model抽象層。如果說Spring AI是連接Java與AI世界的橋梁,那…

永磁同步電機無速度算法--高頻脈振正弦波注入到兩相靜止坐標系

一、原理介紹采用一種改進的永磁同步電機低速無位置傳感器控制策略。與傳統的旋轉高頻信號注入法和脈振高頻信號注入法不同,該策略選擇向靜止坐標軸系注入高頻脈振信號,轉子位置估計信息可以通過載波電流響應提取。并使用一種類似于簡化型擴展卡爾曼濾波…

嵌入式學習日志————ADC模數轉換器之實驗

1.配置ADC的步驟①開啟RCC時鐘,包括ADC和GPIO的時鐘②配置GPIO,把相應端口配置成模擬輸入模式③配置多路開關,把左邊的通道接入右邊的規則組列表里④配置ADC轉換器⑤調用ADC_Cmd函數,開啟ADC2.庫函數配置ADCCLK分頻器void RCC_ADC…

Java設計模式之《狀態模式》

目錄 1、狀態模式 1.1、介紹 1.2、設計背景 1.3、適用場景 2、實現 2.1、if-else實現 2.2、狀態模式實現 2.3、最終版 1、關于if-else的優化 2、狀態模式下的優化 3、ArrayList 配置“狀態流” 3、總結 前言 關于Java的設計模式分類如下: 對于狀態模式…

three.js+WebGL踩坑經驗合集(9.2):polygonOffsetFactor工作原理大揭秘

本篇延續上篇內容: three.jsWebGL踩坑經驗合集(9.1):polygonOffsetUnits工作原理大揭秘-CSDN博客 跟polygonOffsetUnits相比,polygonOffsetFactor的系數m要復雜得多,因為它跟平面的視角相關,而不像r那樣,在一個固定的…

C++高級特性與設計模式答案

目錄 C++高級特性與設計模式:從資源管理到架構設計 一、C++高級特性:超越基礎語法的利器 1. 什么是RAII(資源獲取即初始化)?它有什么作用? 實現原理 核心作用 2. 什么是Pimpl慣用法?它有什么優勢? 實現方式 核心優勢 3. 什么是CRTP(奇異遞歸模板模式)?它的應用場景是…

論文閱讀:arxiv 2025 Can You Trick the Grader? Adversarial Persuasion of LLM Judges

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Can You Trick the Grader? Adversarial Persuasion of LLM Judges https://arxiv.org/pdf/2508.07805 https://www.doubao.com/chat/17534937260220418 文章目錄論文翻譯…

6pen Art

本文轉載自:6pen Art - Hello123工具導航 ** 一、🎨 6pen 是什么? 6pen 是一款由國內團隊開發的 AI 繪畫工具,讓你只需用文字描述想法,就能瞬間生成驚艷的視覺畫作。不管是寫實風景還是抽象概念,它都能理…

Let‘s Encrypt證書在 Android5.x 的設備上報錯

報錯信息: com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.at com.android.volley.toolbox.NetworkUtility.shouldRetryException(N…

C語言數組名與sizeof的深層關聯

要理解 “數組名本質代表整個數組的類型和內存塊” 與 “sizeof(arr) 輸出總字節數” 的關聯,核心是抓住 sizeof 運算符的設計邏輯 和 數組類型的本質屬性—— 這兩者是直接掛鉤的,我們一步步拆解:第一步:先明確 sizeof 的核心作用…

最近對javashop做了壓力測試:百萬級并發下完全不是問題

最近對 javashop 做了壓力測試:百萬級并發下完全不是問題 在電商行業競爭白熱化的今天,系統性能直接決定了用戶體驗和企業商業成功。本文基于《Javashop 壓測報告》,從技術架構、核心指標、業務價值三大維度深度解析其性能優勢,并…

Java大廠面試實戰:從Spring Boot到微服務架構的全鏈路技術解析

Java大廠面試實戰:從Spring Boot到微服務架構的全鏈路技術解析 面試場景:某互聯網大廠Java后端開發崗 面試官(嚴肅):謝飛機,我們今天來聊點硬核的。先說說你對Java生態的理解。 謝飛機(撓頭&…