在企业办公场景中,大量重复性的文件处理、数据整理工作会占用员工大量时间,使用Python编写批处理脚本可以高效解决这类问题,将人工需要数小时完成的工作压缩到几分钟内完成。
常见企业办公批处理场景
企业日常办公中适合用Python实现批处理自动化的场景主要有以下几类:
- 批量文件操作:包括批量重命名、批量移动、批量格式转换等
- 表格数据批量处理:多表格数据汇总、批量修改单元格内容、批量生成报表等
- 文档内容批量处理:批量提取Word、PDF中的指定内容,批量合并文档等
- 批量邮件发送:根据收件人列表和模板批量生成并发送个性化邮件
环境准备与依赖库安装
实现上述场景的批处理功能,需要先安装对应的Python第三方库,常用的库及安装命令如下:
# 安装表格处理库,用于处理Excel文件 pip install openpyxl pandas # 安装文件处理相关库 pip install python-docx PyPDF2 # 安装邮件发送相关库 pip install yagmail
案例一:批量重命名办公文件
企业经常需要按照统一规则重命名大量文件,比如将项目文档按照“日期_部门_文件名”的格式重命名,手动操作耗时且易出错,用Python可以批量完成。
实现逻辑
首先遍历目标文件夹下的所有文件,然后根据预设规则生成新文件名,最后调用系统命令完成重命名操作。
代码示例
import os
from datetime import datetime
def batch_rename_files(folder_path, prefix):
"""
批量重命名指定文件夹下的文件
:param folder_path: 目标文件夹路径
:param prefix: 文件名前缀,格式为 日期_部门
"""
# 获取当前日期作为文件名的一部分
current_date = datetime.now().strftime("%Y%m%d")
# 遍历文件夹下的所有文件
for index, filename in enumerate(os.listdir(folder_path), start=1):
# 拼接原文件完整路径
old_path = os.path.join(folder_path, filename)
# 跳过文件夹,只处理文件
if os.path.isfile(old_path):
# 获取文件后缀
file_ext = os.path.splitext(filename)[1]
# 生成新文件名,格式为 前缀_序号_原文件名
new_filename = f"{prefix}_{current_date}_{index:03d}{file_ext}"
new_path = os.path.join(folder_path, new_filename)
# 执行重命名操作
os.rename(old_path, new_path)
print(f"已将 {filename} 重命名为 {new_filename}")
# 调用函数,参数为目标文件夹路径和文件名前缀
batch_rename_files("D:/办公文档/项目资料", "市场部")
案例二:批量处理Excel表格数据
企业每月需要汇总多个部门的业绩报表,手动复制粘贴不仅效率低还容易出错,用Python可以批量读取多个Excel文件,提取指定列数据后汇总到新的总表中。
实现逻辑
使用pandas库读取多个Excel文件,提取需要的列数据,合并所有数据后生成新的汇总表格,同时可以自动计算合计值。
代码示例
import pandas as pd
import os
def batch_process_excel(folder_path, output_path):
"""
批量处理文件夹下的所有Excel文件,汇总数据到新表格
:param folder_path: 存放单个Excel文件的文件夹路径
:param output_path: 汇总后生成的Excel文件路径
"""
# 存储所有表格的数据
all_data = []
# 遍历文件夹下的所有Excel文件
for filename in os.listdir(folder_path):
if filename.endswith(".xlsx") or filename.endswith(".xls"):
file_path = os.path.join(folder_path, filename)
# 读取Excel文件,只提取姓名、部门、当月业绩三列
df = pd.read_excel(file_path, usecols=["姓名", "部门", "当月业绩"])
# 添加来源文件名列,方便追溯数据
df["来源文件"] = filename
all_data.append(df)
# 合并所有数据
total_df = pd.concat(all_data, ignore_index=True)
# 计算各部门业绩合计
dept_sum = total_df.groupby("部门")["当月业绩"].sum().reset_index()
dept_sum.rename(columns={"当月业绩": "部门业绩合计"}, inplace=True)
# 将合计数据合并到总表
total_df = pd.merge(total_df, dept_sum, on="部门", how="left")
# 保存汇总后的表格
total_df.to_excel(output_path, index=False)
print(f"数据汇总完成,已保存至 {output_path}")
# 调用函数
batch_process_excel("D:/办公文档/月度业绩", "D:/办公文档/月度业绩汇总表.xlsx")
案例三:批量发送个性化邮件
企业发送会议通知、薪资条等邮件时,需要根据不同收件人调整邮件内容,用Python可以批量读取收件人信息和对应内容,自动发送个性化邮件。
实现逻辑
先读取存放收件人信息和邮件内容的Excel表格,然后遍历每一行数据,替换邮件模板中的占位符,最后调用邮件发送库批量发送邮件。
代码示例
import yagmail
import pandas as pd
def batch_send_email(excel_path, sender_email, sender_password):
"""
批量发送个性化邮件
:param excel_path: 存放收件人信息和邮件内容的Excel路径
:param sender_email: 发件人邮箱
:param sender_password: 发件人邮箱授权码
"""
# 读取收件人信息表格
df = pd.read_excel(excel_path)
# 连接邮箱服务器
yag = yagmail.SMTP(user=sender_email, password=sender_password, host="smtp.ipipp.com")
# 遍历每一行收件人信息
for index, row in df.iterrows():
receiver = row["收件人邮箱"]
name = row["收件人姓名"]
content = row["邮件内容"]
# 替换邮件模板中的占位符
email_body = f"尊敬的{name}:n{content}n感谢您的配合。"
# 发送邮件
yag.send(
to=receiver,
subject="月度会议通知",
contents=email_body
)
print(f"已向 {name} 发送邮件,邮箱:{receiver}")
# 关闭连接
yag.close()
print("所有邮件发送完成")
# 调用函数,注意邮箱授权码需要替换为实际值
batch_send_email("D:/办公文档/收件人列表.xlsx", "sender@ipipp.com", "your_auth_code")
批处理脚本的优化建议
为了让批处理脚本更稳定易用,可以注意以下几点:
- 添加异常处理逻辑,避免单个文件处理失败导致整个脚本终止
- 添加日志记录功能,记录每个文件的处理状态,方便排查问题
- 将配置参数(如文件夹路径、文件名规则)放到单独的配置文件中,避免修改代码
- 对于耗时的批处理任务,可以添加进度条显示处理进度
以上案例都是企业办公中非常常见的需求,用户可以根据自己的实际场景调整代码中的参数和逻辑,快速实现对应的批处理自动化功能,大幅减少重复劳动。