Python 在自动化办公汇总和脚本示例_python自动化办公脚本
Python 在自动化办公中的应用非常广泛,可大幅减少重复性操作,提升办公效率。以下是一个全面的 Python 自动化办公详解,并附带多个常用场景的 代码示例,包括:
一、自动化办公能做什么?
二、Python 自动化常用库一览
openpyxl
.xlsx
)pandas
docx
smtplib
imaplib
pyautogui
pdfplumber
PyPDF2
schedule
三、典型场景代码示例
1. 批量生成 Excel 报表(openpyxl)
from openpyxl import Workbookdata = [ [\'姓名\', \'部门\', \'成绩\'], [\'张三\', \'销售部\', 89], [\'李四\', \'技术部\', 95]]wb = Workbook()ws = wb.activews.title = \"员工成绩表\"for row in data: ws.append(row)wb.save(\"员工成绩表.xlsx\")print(\" Excel 报表已生成。\")
2. 自动发送邮件(带附件)
import smtplibfrom email.message import EmailMessagemsg = EmailMessage()msg[\'Subject\'] = \'日报 - 自动发送\'msg[\'From\'] = \'your_email@example.com\'msg[\'To\'] = \'receiver@example.com\'msg.set_content(\'请查收今日日报,见附件。\')# 添加附件with open(\'日报.xlsx\', \'rb\') as f: msg.add_attachment(f.read(), maintype=\'application\', subtype=\'vnd.openxmlformats-officedocument.spreadsheetml.sheet\', filename=\'日报.xlsx\')# 发送邮件(使用QQ邮箱为例)with smtplib.SMTP_SSL(\'smtp.qq.com\', 465) as smtp: smtp.login(\'your_email@example.com\', \'your_app_password\') smtp.send_message(msg)print(\" 邮件已发送。\")
3. 批量提取 PDF 文本(pdfplumber)
import pdfplumberwith pdfplumber.open(\'文件.pdf\') as pdf: all_text = \'\' for page in pdf.pages: all_text += page.extract_text() + \'\\n\'with open(\'提取内容.txt\', \'w\', encoding=\'utf-8\') as f: f.write(all_text)print(\" PDF 文本已提取。\")
4. 自动打开网页、模拟输入(pyautogui + webbrowser)
import webbrowserimport pyautoguiimport time# 打开网页webbrowser.open(\'https://www.google.com\')time.sleep(3) # 等待页面加载# 模拟输入搜索内容pyautogui.write(\'Python automation\', interval=0.1)pyautogui.press(\'enter\')print(\" 自动搜索已完成。\")
5. 定时任务(schedule)
import scheduleimport timedef job(): print(\"现在是:\", time.strftime(\"%H:%M:%S\"), \" → 执行任务\")# 每天早上 9 点执行schedule.every().day.at(\"09:00\").do(job)while True: schedule.run_pending() time.sleep(1)
四、组合案例:自动发送日报
假设你有一个 Excel 日报,每天生成并通过邮件发送:
- 用
openpyxl
创建日报 - 用
smtplib
发送邮件 - 用
schedule
定时运行 - 也可打包为
.exe
实现傻瓜式执行(使用pyinstaller
)
五、提升建议
- 使用
logging
模块记录日志 - 配合
Tkinter
或PyQt
做可视化界面 - 写成函数模块,支持定制化
- 学会使用任务计划(Windows)或
crontab
(Linux/macOS)
批量处理 Excel 文件是办公自动化中非常常见的需求,比如:
- 读取多个 Excel 文件中的数据并合并
- 批量修改单元格内容
- 提取指定字段后导出为新表
- 批量生成报表
一、适用场景
二、常用库安装
pip install openpyxl pandas
三、批量处理 Excel 文件代码示例
示例 1:批量合并多个 Excel 表格
功能:将某个文件夹下所有 .xlsx
文件合并为一个总表
import pandas as pdimport osfolder = \'./excel_files\' # Excel 文件所在文件夹output_file = \'合并结果.xlsx\'all_data = []for file in os.listdir(folder): if file.endswith(\'.xlsx\'): file_path = os.path.join(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(\" 所有 Excel 文件已合并到:\", output_file)
示例 2:批量修改某一列中的值(如“状态”列)
import pandas as pdimport osfolder = \'./excel_files\'for file in os.listdir(folder): if file.endswith(\'.xlsx\'): path = os.path.join(folder, file) df = pd.read_excel(path) # 修改 “状态” 列中的“未完成”为“完成” df[\'状态\'] = df[\'状态\'].replace(\'未完成\', \'完成\') # 保存覆盖原文件 df.to_excel(path, index=False) print(f\" 已修改:{file}\")
示例 3:按字段筛选并保存为新表
import pandas as pdimport osinput_file = \'员工信息表.xlsx\'df = pd.read_excel(input_file)# 筛选工资大于10000的员工filtered = df[df[\'工资\'] > 10000]filtered.to_excel(\'高薪员工.xlsx\', index=False)print(\" 筛选结果已保存。\")
示例 4:为每位员工生成单独 Excel 表
import pandas as pdimport osdf = pd.read_excel(\'员工信息.xlsx\')output_dir = \'./员工报表\'os.makedirs(output_dir, exist_ok=True)# 按“姓名”分组,每个员工一个文件for name, group in df.groupby(\'姓名\'): filename = os.path.join(output_dir, f\'{name}_报表.xlsx\') group.to_excel(filename, index=False) print(f\" 已生成:{filename}\")
四、进阶建议
- 用
Tkinter
加上文件夹选择、按钮,做成 GUI 工具 - 加日志记录:每次处理记录时间、文件名
- 使用定时器 + 自动邮件发送,形成完整自动报表流程
- 使用
openpyxl
更细粒度控制样式、颜色、单元格合并等
自动清洗多个 Excel 表中的重复数据示例:
下面是自动遍历一个文件夹下的多个 Excel 文件,按指定的列去重,并把清洗后的结果另存到一个新文件夹Python脚本。
脚本示例(Python 3 + pandas)
import osimport pandas as pd# === 配置区域 ===input_folder = r\"./excel_input\" # 待处理Excel文件所在文件夹output_folder = r\"./excel_output\" # 清洗后文件保存文件夹subset_columns = None # 去重依据的列,例如 [\"姓名\", \"身份证号\"],None表示全列去重keep_rule = \"first\" # 保留规则: \"first\" 保留首次出现, \"last\" 保留最后一次, False 保留所有重复(不常用)# 创建输出文件夹os.makedirs(output_folder, exist_ok=True)# 遍历文件夹中的所有Excel文件for filename in os.listdir(input_folder): if filename.lower().endswith((\".xls\", \".xlsx\")): file_path = os.path.join(input_folder, filename) try: # 读取Excel(保留所有sheet) xls = pd.ExcelFile(file_path) cleaned_sheets = {} for sheet_name in xls.sheet_names: df = pd.read_excel(xls, sheet_name=sheet_name) # 去重 before_rows = len(df) df_cleaned = df.drop_duplicates(subset=subset_columns, keep=keep_rule) after_rows = len(df_cleaned) print(f\"{filename} - {sheet_name}: {before_rows} -> {after_rows} 行\") cleaned_sheets[sheet_name] = df_cleaned # 保存清洗后的文件 output_path = os.path.join(output_folder, filename) with pd.ExcelWriter(output_path, engine=\"openpyxl\") as writer: for sheet_name, df_cleaned in cleaned_sheets.items(): df_cleaned.to_excel(writer, sheet_name=sheet_name, index=False) except Exception as e: print(f\"处理文件 {filename} 时出错: {e}\")print(\" 数据清洗完成!\")
汽车维修技术视频分享