2026年Python办公自动化实战指南:20个常用脚本解放双手,告别重复劳动
一、新手入门指南
1.1 Python环境安装
2026年Python环境安装已经变得非常简单,推荐使用以下两种方式:
**官方安装包**:访问[Python官网](https://www.python.org/downloads/)下载对应系统的安装包,Windows系统安装时记得勾选”Add Python to PATH”选项
**Miniconda**:适合需要管理多个Python版本的用户,`conda create -n office python=3.11`即可快速创建办公自动化专用环境
安装完成后在终端输入`python –version`和`pip –version`确认安装成功。
1.2 常用办公自动化库介绍
Python办公自动化生态已经非常成熟,以下是2026年最常用的库:
| 库名 | 用途 | 安装命令 |
|——|——|———-|
| openpyxl | Excel文件读写,支持xlsx格式 | `pip install openpyxl` |
| python-docx | Word文档生成与编辑 | `pip install python-docx` |
| PyPDF2 | PDF文件合并、拆分、加密 | `pip install PyPDF2` |
| pandas | 数据统计分析与处理 | `pip install pandas` |
| smtplib | 邮件自动发送(Python内置) | 无需安装 |
| schedule | 定时任务调度 | `pip install schedule` |
| Pillow | 图片处理 | `pip install pillow` |
| python-dotenv | 环境变量管理 | `pip install python-dotenv` |
二、20个常用办公自动化脚本实战
2.1 Excel批量处理类
脚本1:批量合并多个Excel文件到同一个工作表
import os
import pandas as pd
def merge_excel_files(input_folder, output_file):
"""
合并指定文件夹下所有Excel文件到同一个工作表
:param input_folder: 存放Excel文件的文件夹路径
:param output_file: 合并后输出的Excel文件路径
"""
# 获取文件夹下所有xlsx文件
excel_files = [f for f in os.listdir(input_folder) if f.endswith('.xlsx')]
if not excel_files:
print("文件夹中没有Excel文件")
return
# 存储所有数据
all_data = []
for file in excel_files:
file_path = os.path.join(input_folder, file)
df = pd.read_excel(file_path)
# 添加来源文件名列
df['来源文件'] = file
all_data.append(df)
# 合并所有数据
merged_df = pd.concat(all_data, ignore_index=True)
merged_df.to_excel(output_file, index=False)
print(f"合并完成,共处理{len(excel_files)}个文件,输出文件:{output_file}")
# 使用示例
merge_excel_files('./excel_files', './merged_result.xlsx')
使用说明:将需要合并的Excel文件放在`excel_files`文件夹下,运行脚本后会在当前目录生成`merged_result.xlsx`,包含所有文件的数据和来源文件名。
脚本2:批量提取Excel中指定列的数据
import pandas as pd
def extract_excel_columns(input_file, output_file, columns):
"""
提取Excel文件中指定列的数据
:param input_file: 输入Excel文件路径
:param output_file: 输出Excel文件路径
:param columns: 需要提取的列名列表,例如['姓名', '电话', '地址']
"""
df = pd.read_excel(input_file)
# 检查列是否存在
missing_columns = [col for col in columns if col not in df.columns]
if missing_columns:
print(f"错误:文件中不存在以下列:{missing_columns}")
return
extracted_df = df[columns]
extracted_df.to_excel(output_file, index=False)
print(f"提取完成,共提取{len(extracted_df)}条数据")
# 使用示例
extract_excel_columns('data.xlsx', 'extracted_data.xlsx', ['姓名', '手机号', '邮箱'])
使用说明:修改`columns`参数为你需要提取的列名,支持任意数量的列提取。
脚本3:Excel数据自动去重
import pandas as pd
def deduplicate_excel(input_file, output_file, subset_columns=None):
"""
Excel数据去重
:param input_file: 输入Excel文件路径
:param output_file: 输出去重后的Excel文件路径
:param subset_columns: 按指定列去重,None表示按所有列去重
"""
df = pd.read_excel(input_file)
original_count = len(df)
# 去重
df_deduplicated = df.drop_duplicates(subset=subset_columns, keep='first')
deduplicated_count = len(df_deduplicated)
df_deduplicated.to_excel(output_file, index=False)
print(f"去重完成,原数据{original_count}条,去重后{deduplicated_count}条,删除了{original_count - deduplicated_count}条重复数据")
# 使用示例
deduplicate_excel('user_data.xlsx', 'user_data_deduplicated.xlsx', subset_columns=['手机号'])
使用说明:如果需要按手机号去重就传入`subset_columns=[‘手机号’]`,不需要的话传None即可。
脚本4:批量生成Excel报表
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill
def generate_excel_report(data, output_file, title="销售报表"):
"""
生成带格式的Excel报表
:param data: 报表数据,列表格式,第一个元素是表头
:param output_file: 输出文件路径
:param title: 报表标题
"""
wb = Workbook()
ws = wb.active
ws.title = "报表"
# 写入标题
ws.merge_cells('A1:D1')
title_cell = ws['A1']
title_cell.value = title
title_cell.font = Font(size=16, bold=True)
title_cell.alignment = Alignment(horizontal='center', vertical='center')
ws.row_dimensions[1].height = 30
# 表头样式
header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
header_font = Font(color='FFFFFF', bold=True)
# 写入数据
for row_idx, row_data in enumerate(data, start=2):
for col_idx, value in enumerate(row_data, start=1):
cell = ws.cell(row=row_idx, column=col_idx, value=value)
# 表头样式
if row_idx == 2:
cell.fill = header_fill
cell.font = header_font
cell.alignment = Alignment(horizontal='center')
# 自动调整列宽
for col in ws.columns:
max_length = 0
column = col[0].column_letter
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2) * 1.2
ws.column_dimensions[column].width = adjusted_width
wb.save(output_file)
print(f"报表生成成功:{output_file}")
# 使用示例
report_data = [
['日期', '产品名称', '销量', '销售额'],
['2026-01-01', '产品A', 100, 5000],
['2026-01-02', '产品B', 80, 4000],
['2026-01-03', '产品C', 120, 7200]
]
generate_excel_report(report_data, 'sales_report.xlsx', '2026年第一季度销售报表')
使用说明:修改`report_data`为你的报表数据,脚本会自动生成带格式的Excel报表。
2.2 Word文档生成类
脚本5:批量生成Word合同文档
from docx import Document
from docx.shared import Pt
import pandas as pd
def generate_contracts(template_path, data_file, output_folder):
"""
批量生成Word合同文档
:param template_path: Word模板文件路径,模板中占位符使用{{变量名}}格式
:param data_file: 包含合同数据的Excel文件路径
:param output_folder: 生成合同的输出文件夹
"""
import os
os.makedirs(output_folder, exist_ok=True)
# 读取数据
df = pd.read_excel(data_file)
for _, row in df.iterrows():
doc = Document(template_path)
# 替换模板中的占位符
for paragraph in doc.paragraphs:
for key, value in row.items():
placeholder = f'{{{{{key}}}}}'
if placeholder in paragraph.text:
paragraph.text = paragraph.text.replace(placeholder, str(value))
# 设置字体
for run in paragraph.runs:
run.font.size = Pt(12)
run.font.name = '宋体'
# 保存文档,以客户姓名命名
output_path = os.path.join(output_folder, f'合同_{row["客户姓名"]}.docx')
doc.save(output_path)
print(f"已生成合同:{output_path}")
# 使用示例
generate_contracts('合同模板.docx', '客户数据.xlsx', '生成的合同')
使用说明:Word模板中需要替换的内容用`{{变量名}}`表示,Excel文件的列名需要和变量名对应。
脚本6:Word文档批量转PDF
from docx2pdf import convert
import os
def batch_docx_to_pdf(input_folder, output_folder):
"""
批量将Word文档转换为PDF格式
:param input_folder: 存放Word文档的文件夹
:param output_folder: 输出PDF的文件夹
"""
os.makedirs(output_folder, exist_ok=True)
docx_files = [f for f in os.listdir(input_folder) if f.endswith('.docx')]
for file in docx_files:
input_path = os.path.join(input_folder, file)
output_path = os.path.join(output_folder, file.replace('.docx', '.pdf'))
convert(input_path, output_path)
print(f"已转换:{file} -> {os.path.basename(output_path)}")
# 使用示例
batch_docx_to_pdf('./word_files', './pdf_files')
使用说明:需要先安装`docx2pdf`库:`pip install docx2pdf`,Windows系统需要安装Word,macOS需要安装Pages。
2.3 PDF操作类
脚本7:批量合并多个PDF文件
from PyPDF2 import PdfMerger
import os
def merge_pdfs(input_folder, output_file):
"""
合并文件夹下所有PDF文件
:param input_folder: 存放PDF文件的文件夹
:param output_file: 合并后的输出PDF文件路径
"""
merger = PdfMerger()
pdf_files = sorted([f for f in os.listdir(input_folder) if f.endswith('.pdf')])
for pdf in pdf_files:
pdf_path = os.path.join(input_folder, pdf)
merger.append(pdf_path)
print(f"已添加:{pdf}")
merger.write(output_file)
merger.close()
print(f"合并完成,输出文件:{output_file}")
# 使用示例
merge_pdfs('./pdf_files', 'merged.pdf')
使用说明:PDF文件会按照文件名排序后合并,适合合并合同、报表等多份PDF。
脚本8:PDF批量加密
from PyPDF2 import PdfReader, PdfWriter
import os
def encrypt_pdfs(input_folder, output_folder, password):
"""
批量给PDF文件添加密码保护
:param input_folder: 输入PDF文件夹
:param output_folder: 输出加密PDF文件夹
:param password: 加密密码
"""
os.makedirs(output_folder, exist_ok=True)
pdf_files = [f for f in os.listdir(input_folder) if f.endswith('.pdf')]
for file in pdf_files:
input_path = os.path.join(input_folder, file)
output_path = os.path.join(output_folder, f'加密_{file}')
reader = PdfReader(input_path)
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.encrypt(password)
with open(output_path, 'wb') as f:
writer.write(f)
print(f"已加密:{file}")
# 使用示例
encrypt_pdfs('./pdf_files', './encrypted_pdfs', '123456')
使用说明:加密后的PDF打开需要输入设置的密码,适合发送敏感文档。
脚本9:提取PDF中的文本内容
from PyPDF2 import PdfReader
def extract_pdf_text(pdf_path, output_txt_path):
"""
提取PDF文件中的所有文本内容
:param pdf_path: 输入PDF文件路径
:param output_txt_path: 输出文本文件路径
"""
reader = PdfReader(pdf_path)
all_text = ""
for page_num, page in enumerate(reader.pages, 1):
text = page.extract_text()
all_text += f"===== 第{page_num}页 =====\n{text}\n\n"
with open(output_txt_path, 'w', encoding='utf-8') as f:
f.write(all_text)
print(f"文本提取完成,输出文件:{output_txt_path}")
# 使用示例
extract_pdf_text('document.pdf', 'pdf_text.txt')
使用说明:对于扫描版PDF需要配合OCR工具使用,本脚本适用于文字版PDF。
2.4 邮件自动发送类
脚本10:批量发送带附件的邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import pandas as pd
import os
from dotenv import load_dotenv
# 加载环境变量,避免硬编码密码
load_dotenv()
def send_batch_emails(data_file, attachment_folder=None):
"""
批量发送带附件的邮件
:param data_file: 包含收件人信息的Excel文件,需要包含收件人邮箱、姓名等列
:param attachment_folder: 附件文件夹,附件名需要和收件人姓名对应
"""
# 邮箱配置
smtp_server = 'smtp.qq.com'
smtp_port = 587
sender_email = os.getenv('SENDER_EMAIL')
sender_password = os.getenv('SENDER_PASSWORD') # QQ邮箱使用授权码
# 读取收件人数据
df = pd.read_excel(data_file)
# 连接SMTP服务器
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(sender_email, sender_password)
for _, row in df.iterrows():
# 创建邮件
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = row['收件人邮箱']
msg['Subject'] = f"{row['姓名']}您好,这是您的月度报表"
# 邮件正文
body = f"""
尊敬的{row['姓名']}:
您好!附件是您2026年1月的月度工作报表,请查收。
如有任何问题,请随时联系。
此致
敬礼
人力资源部
"""
msg.attach(MIMEText(body, 'plain', 'utf-8'))
# 添加附件
if attachment_folder:
attachment_path = os.path.join(attachment_folder, f"{row['姓名']}_报表.pdf")
if os.path.exists(attachment_path):
with open(attachment_path, 'rb') as f:
part = MIMEApplication(f.read())
part.add_header('Content-Disposition', 'attachment', filename=f"{row['姓名']}_报表.pdf")
msg.attach(part)
# 发送邮件
server.sendmail(sender_email, row['收件人邮箱'], msg.as_string())
print(f"已发送邮件给:{row['姓名']} <{row['收件人邮箱']}>")
server.quit()
print("所有邮件发送完成")
# 使用示例
send_batch_emails('收件人列表.xlsx', './报表附件')
使用说明:需要创建`.env`文件配置邮箱信息,QQ邮箱需要开启SMTP服务并使用授权码登录。
2.5 文件批量处理类
脚本11:批量重命名文件
import os
def batch_rename_files(folder_path, prefix, start_num=1):
"""
批量重命名文件夹下的所有文件
:param folder_path: 目标文件夹路径
:param prefix: 文件名前缀
:param start_num: 起始编号
"""
files = os.listdir(folder_path)
# 过滤掉文件夹,只处理文件
files = [f for f in files if os.path.isfile(os.path.join(folder_path, f))]
for idx, filename in enumerate(files, start=start_num):
# 获取文件扩展名
file_ext = os.path.splitext(filename)[1]
new_filename = f"{prefix}_{idx:03d}{file_ext}"
old_path = os.path.join(folder_path, filename)
new_path = os.path.join(folder_path, new_filename)
os.rename(old_path, new_path)
print(f"已重命名:{filename} -> {new_filename}")
# 使用示例
batch_rename_files('./images', '产品图片', start_num=1)
使用说明:运行后会将文件夹下的所有文件重命名为`产品图片_001.jpg`、`产品图片_002.jpg`这样的格式。
脚本12:批量按文件类型整理文件
import os
import shutil
def organize_files_by_type(folder_path):
"""
按文件类型整理文件夹中的文件,自动创建对应类型的文件夹
:param folder_path: 需要整理的文件夹路径
"""
# 定义文件类型和对应的文件夹名
file_types = {
'图片': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'],
'文档': ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.txt'],
'视频': ['.mp4', '.avi', '.mov', '.mkv', '.flv'],
'音频': ['.mp3', '.wav', '.flac', '.aac'],
'压缩包': ['.zip', '.rar', '.7z', '.tar', '.gz'],
'程序': ['.exe', '.msi', '.dmg', '.pkg']
}
# 创建分类文件夹
for folder in file_types.keys():
folder_full_path = os.path.join(folder_path, folder)
os.makedirs(folder_full_path, exist_ok=True)
# 创建其他文件夹
other_folder = os.path.join(folder_path, '其他')
os.makedirs(other_folder, exist_ok=True)
# 遍历文件
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path):
file_ext = os.path.splitext(filename)[1].lower()
moved = False
# 判断文件类型
for folder, extensions in file_types.items():
if file_ext in extensions:
target_path = os.path.join(folder_path, folder, filename)
shutil.move(file_path, target_path)
print(f"已移动:{filename} -> {folder}")
moved = True
break
# 未知类型移动到其他文件夹
if not moved:
target_path = os.path.join(other_folder, filename)
shutil.move(file_path, target_path)
print(f"已移动:{filename} -> 其他")
# 使用示例
organize_files_by_type('./downloads')
使用说明:运行后会自动将下载文件夹中的文件按类型分类到对应的子文件夹中。
2.6 数据统计分析类
脚本13:销售数据自动统计分析
import pandas as pd
import matplotlib.pyplot as plt
def analyze_sales_data(input_file, output_report):
"""
分析销售数据并生成统计报表
:param input_file: 销售数据Excel文件路径
:param output_report: 输出分析报告路径
"""
# 读取数据
df = pd.read_excel(input_file)
# 计算总销售额
total_sales = df['销售额'].sum()
# 按产品统计销售额
product_sales = df.groupby('产品名称')['销售额'].sum().sort_values(ascending=False)
# 按月统计销售额
df['月份'] = pd.to_datetime(df['销售日期']).dt.month
monthly_sales = df.groupby('月份')['销售额'].sum()
# 生成分析报告
report = f"""
# 销售数据分析报告
## 一、总体情况
- 总销售额:{total_sales:.2f}元
- 总订单数:{len(df)}单
- 销售产品种类:{len(df['产品名称'].unique())}种
## 二、产品销售排行
{product_sales.to_markdown()}
## 三、月度销售趋势
{monthly_sales.to_markdown()}
"""
# 保存报告
with open(output_report, 'w', encoding='utf-8') as f:
f.write(report)
# 生成销售趋势图
plt.figure(figsize=(10, 6))
monthly_sales.plot(kind='line', marker='o')
plt.title('月度销售趋势')
plt.xlabel('月份')
plt.ylabel('销售额')
plt.grid(True)
plt.savefig('月度销售趋势.png')
print(f"分析报告已生成:{output_report}")
# 使用示例
analyze_sales_data('销售数据.xlsx', '销售分析报告.md')
使用说明:脚本会自动计算销售数据的各项指标,并生成Markdown格式的分析报告和趋势图。
脚本14:员工考勤数据自动统计
import pandas as pd
from datetime import datetime
def calculate_attendance(attendance_file, output_file):
"""
统计员工考勤数据,计算迟到、早退、旷工次数
:param attendance_file: 考勤打卡记录Excel文件
:param output_file: 输出统计结果文件
"""
df = pd.read_excel(attendance_file)
work_start_time = datetime.strptime('09:00:00', '%H:%M:%S').time()
work_end_time = datetime.strptime('18:00:00', '%H:%M:%S').time()
# 转换时间格式
df['上班打卡时间'] = pd.to_datetime(df['上班打卡时间']).dt.time
df['下班打卡时间'] = pd.to_datetime(df['下班打卡时间']).dt.time
# 统计考勤状态
def get_attendance_status(row):
status = []
if pd.isna(row['上班打卡时间']) or row['上班打卡时间'] > work_start_time:
status.append('迟到')
if pd.isna(row['下班打卡时间']) or row['下班打卡时间'] < work_end_time:
status.append('早退')
if pd.isna(row['上班打卡时间']) and pd.isna(row['下班打卡时间']):
status = ['旷工']
return '、'.join(status) if status else '正常'
df['考勤状态'] = df.apply(get_attendance_status, axis=1)
# 按员工统计
attendance_stats = df.groupby(['员工姓名', '考勤状态']).size().unstack(fill_value=0)
attendance_stats.to_excel(output_file)
print(f"考勤统计完成,输出文件:{output_file}")
# 使用示例
calculate_attendance('考勤记录.xlsx', '考勤统计结果.xlsx')
使用说明:根据公司的上下班时间修改`work_start_time`和`work_end_time`即可。
2.7 定时任务类
脚本15:每日定时发送工作提醒
import schedule
import time
import smtplib
from email.mime.text import MIMEText
from dotenv import load_dotenv
import os
load_dotenv()
def send_daily_reminder():
"""发送每日工作提醒邮件"""
sender_email = os.getenv('SENDER_EMAIL')
sender_password = os.getenv('SENDER_PASSWORD')
receiver_email = 'team@company.com'
msg = MIMEText("""
各位同事:
大家好!请记得在18:00前提交今日工作日报,谢谢配合!
行政部
""", 'plain', 'utf-8')
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = '每日工作提醒:请提交今日日报'
with smtplib.SMTP_SSL('smtp.qq.com', 465) as server:
server.login(sender_email, sender_password)
server.sendmail(sender_email, receiver_email, msg.as_string())
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')} 提醒邮件已发送")
# 设置定时任务:每天17:30发送提醒
schedule.every().day.at("17:30").do(send_daily_reminder)
print("定时任务已启动,每天17:30发送提醒邮件...")
while True:
schedule.run_pending()
time.sleep(60)
使用说明:运行脚本后会在后台执行,到设定时间自动发送提醒邮件,支持各种复杂的定时规则。
脚本16:每周自动备份重要文件
import schedule
import time
import shutil
import os
from datetime import datetime
def backup_files():
"""自动备份重要文件到指定目录"""
source_folder = '/path/to/important/files'
backup_folder = '/path/to/backup'
# 按日期创建备份文件夹
date_str = datetime.now().strftime('%Y%m%d')
backup_path = os.path.join(backup_folder, f'backup_{date_str}')
# 复制文件夹
shutil.copytree(source_folder, backup_path)
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')} 文件备份完成,备份路径:{backup_path}")
# 设置定时任务:每周日晚上22点执行备份
schedule.every().sunday.at("22:00").do(backup_files)
print("备份任务已启动,每周日22:00自动备份文件...")
while True:
schedule.run_pending()
time.sleep(60)
使用说明:修改`source_folder`为需要备份的文件夹路径,`backup_folder`为备份存放路径。
2.8 其他实用脚本
脚本17:批量生成二维码
import qrcode
import pandas as pd
import os
def batch_generate_qr_codes(data_file, output_folder):
"""
批量生成二维码图片
:param data_file: 包含二维码内容的Excel文件,需要包含'内容'和'文件名'列
:param output_folder: 输出二维码图片的文件夹
"""
os.makedirs(output_folder, exist_ok=True)
df = pd.read_excel(data_file)
for _, row in df.iterrows():
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(row['内容'])
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white')
output_path = os.path.join(output_folder, f"{row['文件名']}.png")
img.save(output_path)
print(f"已生成二维码:{output_path}")
# 使用示例
batch_generate_qr_codes('二维码内容.xlsx', './qrcodes')
使用说明:需要先安装`qrcode`库:`pip install qrcode[pil]`,适用于批量生成网址、名片等二维码。
脚本18:图片批量压缩
from PIL import Image
import os
def compress_images(input_folder, output_folder, quality=85):
"""
批量压缩图片文件
:param input_folder: 输入图片文件夹
:param output_folder: 输出压缩后图片的文件夹
:param quality: 压缩质量,0-100,数值越高质量越好
"""
os.makedirs(output_folder, exist_ok=True)
image_extensions = ['.jpg', '.jpeg', '.png']
for filename in os.listdir(input_folder):
file_ext = os.path.splitext(filename)[1].lower()
if file_ext in image_extensions:
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
with Image.open(input_path) as img:
# 保存时压缩
img.save(output_path, optimize=True, quality=quality)
original_size = os.path.getsize(input_path) / 1024
compressed_size = os.path.getsize(output_path) / 1024
print(f"已压缩:{filename},原大小:{original_size:.1f}KB,压缩后:{compressed_size:.1f}KB,压缩比:{(1 - compressed_size/original_size)*100:.1f}%")
# 使用示例
compress_images('./original_images', './compressed_images', quality=80)
使用说明:批量压缩图片用于网页上传、发送邮件等场景,可有效减小文件大小。
脚本19:自动生成数据分析可视化图表
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
def generate_data_visualization(data_file, output_folder):
"""
自动生成常见的数据可视化图表
:param data_file: 数据文件路径
:param output_folder: 输出图表的文件夹
"""
os.makedirs(output_folder, exist_ok=True)
df = pd.read_excel(data_file)
# 柱状图:各产品销量对比
plt.figure(figsize=(12, 6))
sns.barplot(data=df, x='产品名称', y='销量', palette='viridis')
plt.title('各产品销量对比')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig(os.path.join(output_folder, '产品销量对比.png'))
# 饼图:销售额占比
plt.figure(figsize=(8, 8))
product_sales = df.groupby('产品名称')['销售额'].sum()
plt.pie(product_sales, labels=product_sales.index, autopct='%1.1f%%', startangle=90)
plt.title('各产品销售额占比')
plt.tight_layout()
plt.savefig(os.path.join(output_folder, '销售额占比.png'))
# 折线图:销售趋势
plt.figure(figsize=(12, 6))
df['销售日期'] = pd.to_datetime(df['销售日期'])
daily_sales = df.groupby('销售日期')['销售额'].sum()
plt.plot(daily_sales.index, daily_sales.values, marker='o')
plt.title('每日销售趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.savefig(os.path.join(output_folder, '销售趋势.png'))
print(f"图表生成完成,已保存到:{output_folder}")
# 使用示例
generate_data_visualization('销售数据.xlsx', './charts')
使用说明:需要安装`seaborn`库:`pip install seaborn`,自动生成三种常见的数据分析图表。
脚本20:批量提取网页数据(爬虫)
import requests
from bs4 import BeautifulSoup
import pandas as pd
def scrape_website_data(url, output_file):
"""
批量提取网页表格数据
:param url: 目标网页URL
:param output_file: 输出Excel文件路径
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取网页中的表格
table = soup.find('table')
if not table:
print("网页中没有找到表格")
return
# 解析表格数据
rows = []
for tr in table.find_all('tr'):
row = [td.get_text(strip=True) for td in tr.find_all(['th', 'td'])]
if row:
rows.append(row)
# 保存为Excel
df = pd.DataFrame(rows[1:], columns=rows[0])
df.to_excel(output_file, index=False)
print(f"数据提取完成,共提取{len(df)}条数据,输出文件:{output_file}")
# 使用示例
scrape_website_data('https://example.com/table-page', '网页数据.xlsx')
使用说明:需要安装`requests`和`beautifulsoup4`库:`pip install requests beautifulsoup4`,适用于提取公开网页中的表格数据。
三、新手常见踩坑指南
3.1 文件路径问题
**绝对路径 vs 相对路径**:新手经常搞混路径写法,推荐使用`os.path`模块处理路径,避免硬编码路径
**中文路径问题**:部分老版本库对中文路径支持不好,尽量使用英文路径和文件名
**路径分隔符**:Windows用`\`,macOS/Linux用`/`,使用`os.path.join()`自动适配不同系统
3.2 版本兼容性问题
**Python版本差异**:Python 3.7以下版本对部分新库支持不好,推荐使用Python 3.8-3.11版本
**库版本冲突**:不同库可能依赖相同库的不同版本,推荐使用虚拟环境(venv/conda)隔离项目依赖
**API变更**:部分库升级后API会变化,比如pandas 2.0对部分方法进行了修改,遇到报错可以查看官方文档调整写法
3.3 数据安全注意事项
**敏感数据保护**:不要在代码中硬编码邮箱密码、API密钥等敏感信息,使用环境变量或配置文件存储
**数据备份**:操作重要文件前一定要备份,避免脚本运行错误导致数据丢失
**权限控制**:运行脚本时不要使用管理员权限,避免误操作删除系统文件
**爬虫合规**:爬取网页数据时遵守网站robots协议,不要对网站造成过大访问压力
四、变现盈利方向
4.1 办公自动化工具定制
**企业定制服务**:为中小企业定制专属办公自动化工具,比如Excel批量处理工具、客户管理系统等,收费根据复杂度从几千到几万元不等
**SaaS工具开发**:开发通用型办公自动化SaaS工具,按订阅收费,比如PDF处理工具、报表生成工具等
**脚本定制**:为职场人士定制个性化Python脚本,解决他们的具体工作痛点,单脚本收费几百到几千元
4.2 企业效率提升服务
**流程改造咨询**:为企业提供办公流程自动化改造咨询服务,帮助企业梳理现有工作流程,用Python自动化替代重复劳动
**系统集成服务**:帮助企业集成不同系统之间的数据,实现数据自动同步,避免人工重复录入
**员工效率培训**:为企业员工提供Python办公自动化培训,提升整体团队工作效率
4.3 职场技能培训
**线上课程开发**:开发Python办公自动化线上课程,在各大知识付费平台销售,单价99-399元不等
**一对一辅导**:为职场人士提供一对一Python办公自动化辅导,按小时收费,每小时200-500元
**企业内训**:为企业提供定制化的Python办公自动化内训服务,每天收费5000-20000元
五、总结
Python办公自动化是2026年职场人士必备的技能之一,掌握这些Python脚本可以让你从繁琐的重复劳动中解放出来,把时间花在更有价值的事情上。本文介绍的20个常用脚本覆盖了Excel自动化、Word文档处理、PDF操作、邮件发送、文件处理、数据分析、定时任务等几乎所有常见的办公场景,每个脚本都可以直接运行使用。
对于新手来说,不要害怕踩坑,多动手实践是最好的学习方法。从简单的脚本开始,逐步掌握Python办公自动化的技巧,不仅可以提升自己的职场效率,还可以通过提供定制服务、培训等方式实现额外收入。希望这篇指南能够帮助你开启Python办公自动化的学习之旅,真正实现"解放双手,告别重复劳动"。