Python 自動化辦公神器:讓 Excel 表格工作自動完成
每天花時間復制粘貼、整理數據、制作報表?這些重復性工作完全可以用Python自動化。根據調查,白領每天平均浪費2小時在重復的文件操作上。用Python寫個簡單腳本,可以節省數十倍的時間。本文將展示10個實用的Excel自動化技巧,手把手教你釋放生產力。

基礎準備:安裝必要的庫
# 安裝Pandas(處理數據)
pip install pandas
# 安裝openpyxl(操作Excel)
pip install openpyxl
# 安裝xlrd(讀取老版本Excel)
pip install xlrd
# 驗證安裝
python -c "import pandas; print(pandas.__version__)"任務1:批量讀取多個Excel文件并合并
場景:你有10個銷售部門的Excel報表,需要合并成一個總表
import pandas as pd
import os
from pathlib import Path
# 方法1:簡單有效
defmerge_excel_files(folder_path):
"""讀取文件夾內所有Excel并合并"""
all_data = []
# 找到所有Excel文件
for file in os.listdir(folder_path):
if file.endswith('.xlsx'):
file_path = os.path.join(folder_path, file)
# 讀取Excel
df = pd.read_excel(file_path)
all_data.append(df)
print(f"? 已讀取:{file}")
# 合并所有數據
merged_df = pd.concat(all_data, ignore_index=True)
# 保存結果
merged_df.to_excel('merged_report.xlsx', index=False)
print(f"\n? 合并完成!共{len(merged_df)}行數據")
return merged_df
# 使用
result = merge_excel_files('./sales_data/')
print(result.head()) # 查看前5行任務2:自動填充和格式化
場景:需要給所有空白的"備注"列填充"待處理"
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font
defauto_fill_and_format(file_path):
"""填充空值并設置格式"""
# 方法1:用Pandas處理數據
df = pd.read_excel(file_path)
# 填充"備注"列的空值
df['備注'].fillna('待處理', inplace=True)
# 臨時保存
df.to_excel('temp.xlsx', index=False)
# 方法2:用openpyxl設置格式
wb = load_workbook('temp.xlsx')
ws = wb.active
# 設置標題行背景色和字體
header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
header_font = Font(bold=True, color='FFFFFF')
for cell in ws[1]:
cell.fill = header_fill
cell.font = header_font
# 自動調整列寬
for column in ws.columns:
max_length = 0
column_letter = column[0].column_letter
for cell in column:
if cell.value:
max_length = max(max_length, len(str(cell.value)))
ws.column_dimensions[column_letter].width = max_length + 2
# 保存
wb.save(file_path)
print("? 填充和格式化完成")
# 使用
auto_fill_and_format('data.xlsx')任務3:條件提取和過濾
場景:從銷售數據中提取所有銷售額>10000的記錄
import pandas as pd
deffilter_and_export(input_file, output_file):
"""篩選數據并導出"""
# 讀取數據
df = pd.read_excel(input_file)
# 條件1:銷售額大于10000
condition1 = df['銷售額'] > 10000
# 條件2:銷售員是"王明"
condition2 = df['銷售員'] == '王明'
# 條件3:日期在2024年
df['日期'] = pd.to_datetime(df['日期'])
condition3 = df['日期'].dt.year == 2024
# 使用多個條件(&表示AND, |表示OR)
filtered_df = df[condition1 & condition2 & condition3]
# 導出結果
filtered_df.to_excel(output_file, index=False)
print(f"? 已提取{len(filtered_df)}條符合條件的記錄")
return filtered_df
# 使用
result = filter_and_export('sales.xlsx', 'high_sales.xlsx')任務4:數據統計和匯總
場景:計算每個銷售員的銷售總額和平均銷售額
import pandas as pd
defgenerate_summary(file_path):
"""生成統計匯總"""
df = pd.read_excel(file_path)
# 按銷售員分組統計
summary = df.groupby('銷售員').agg({
'銷售額': ['sum', 'mean', 'count'],
'訂單ID': 'count'
}).round(2)
# 重命名列
summary.columns = ['總銷售額', '平均銷售額', '訂單數', '交易次數']
# 排序(按總銷售額降序)
summary = summary.sort_values('總銷售額', ascending=False)
# 保存
summary.to_excel('sales_summary.xlsx')
print("銷售統計匯總:")
print(summary)
return summary
# 使用
generate_summary('sales.xlsx')任務5:數據驗證和清理
場景:檢查數據質量,清理錯誤數據
import pandas as pd
defvalidate_and_clean(file_path):
"""數據驗證和清理"""
df = pd.read_excel(file_path)
print("=== 數據質量檢查 ===")
# 檢查缺失值
missing = df.isnull().sum()
print(f"\n缺失值:\n{missing}")
# 檢查重復值
duplicates = df.duplicated().sum()
print(f"\n重復行數:{duplicates}")
# 清理:刪除缺失值
df_clean = df.dropna()
# 清理:刪除重復值
df_clean = df_clean.drop_duplicates()
# 數據類型檢查和轉換
print(f"\n原始數據類型:\n{df.dtypes}")
# 確保銷售額是數字類型
df_clean['銷售額'] = pd.to_numeric(df_clean['銷售額'], errors='coerce')
# 刪除轉換失敗的行(sales為NaN)
df_clean = df_clean.dropna(subset=['銷售額'])
# 保存清理后的數據
df_clean.to_excel('cleaned_data.xlsx', index=False)
print(f"\n? 清理完成!")
print(f" 原始行數:{len(df)}")
print(f" 清理后行數:{len(df_clean)}")
return df_clean
# 使用
validate_and_clean('raw_data.xlsx')任務6:定時自動處理文件
場景:每天凌晨自動生成前一天的銷售報告
import schedule
import time
from datetime import datetime, timedelta
import pandas as pd
defdaily_report():
"""生成日報"""
today = datetime.now().date()
yesterday = today - timedelta(days=1)
# 讀取銷售數據
df = pd.read_excel('sales_data.xlsx')
df['日期'] = pd.to_datetime(df['日期'])
# 篩選昨天的數據
yesterday_data = df[df['日期'].dt.date == yesterday]
# 生成報告
report = yesterday_data.groupby('銷售員')['銷售額'].sum()
# 以日期為文件名保存
report_file = f'報告_{yesterday}.xlsx'
report.to_excel(report_file)
print(f"? 日報已生成:{report_file}")
# 設置定時任務
schedule.every().day.at("00:30").do(daily_report)
# 運行調度器
whileTrue:
schedule.run_pending()
time.sleep(60)Python自動化辦公的威力在于,你只需花30分鐘寫個腳本,就能節省一年的重復工作。最開始可能覺得學習成本高,但一旦掌握了基本技巧,你會發現能用Python解決的日常問題多得驚人。





























