20个职场人必须会的Python办公脚本分享
作者:小庄-Python办公
如果你还在每天复制粘贴到深夜,或者因为合并几百个表格而想砸电脑,请立刻停下!在这个数据爆炸的时代,Python 早就不是程序员的专属,它是每个职场人手里最强的武器。今天我不讲大道理,只上干货——20个拿来就能用的Python脚本,直接解决你90%的重复劳动。从Excel批量处理到自动化邮件,从PDF秒速拆分到数据可视化,每一个都是为了让你早点下班而生。收藏这一篇,你的职场效率至少翻倍!
01. Excel 篇:多表一键合并,告别复制粘贴
痛点:手动合并100个Excel表,眼花手抖还出错
月底汇总报表是每个人的噩梦。不管是销售日报、考勤表还是各部门预算,打开一个复制一个,不仅慢,还容易因为格式问题报错。半小时的工作量,手动做可能要一下午。
# 运行环境:Python≥3.8
# pip install pandas openpyxl
import pandas as pd
import os
def merge_excels(folder_path, output_file):
# 获取文件夹下所有xlsx文件
files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]
all_data = []
print(f"发现 {len(files)} 个文件,开始合并...")
for file in files:
file_path = os.path.join(folder_path, file)
# 读取数据,默认读取第一个sheet
df = pd.read_excel(file_path)
all_data.append(df)
# 合并所有数据
result = pd.concat(all_data, ignore_index=True)
# 导出结果
result.to_excel(output_file, index=False)
print(f"合并完成!文件已保存为:{output_file}")
# 使用示例:将 'data' 文件夹下的所有表格合并
merge_excels('./data', '合并汇总.xlsx')
效果对比:原本耗时3小时的手工粘贴,现在只需3秒,所有同构表格自动拼接,且无错漏。
一键总结:表格再多,三秒搞定。
02. Excel 篇:按条件拆分Sheet,精准分发
痛点:把总表拆分给各部门,筛选复制太繁琐
总表里有全公司的数据,需要按“部门”拆分成单独的Excel文件发给各负责人。手动筛选、复制、粘贴、保存,重复几十次,枯燥且容易发错人。
# 运行环境:Python≥3.8
# pip install pandas openpyxl
import pandas as pd
def split_excel_by_column(file_path, column_name):
# 读取总表
df = pd.read_excel(file_path)
# 获取该列所有唯一值(如所有部门名称)
unique_values = df[column_name].unique()
for value in unique_values:
# 筛选数据
new_df = df[df[column_name] == value]
# 保存为新文件
filename = f"{value}_数据.xlsx"
new_df.to_excel(filename, index=False)
print(f"已生成:{filename}")
# 使用示例:按 '部门' 列拆分 '总表.xlsx'
split_excel_by_column('总表.xlsx', '部门')
效果对比:自动按部门生成独立文件,100个部门也能瞬间拆完,文件名自动规范。
一键总结:拆分分发,不再头秃。
03. Word 篇:批量替换合同模板,拒绝机械劳动
痛点:几百份合同只需改个名字和日期
HR和法务常遇到的场景:合同模板一样,只有甲方名称、金额、日期不同。逐个打开Word修改、另存为,不仅效率低,还容易漏改某个角落。
# 运行环境:Python≥3.8
# pip install python-docx
from docx import Document
def batch_generate_contracts(template_path, data_dict):
"""
data_dict: {'张三': '2023-10-01', '李四': '2023-10-02'}
"""
for name, date in data_dict.items():
doc = Document(template_path)
# 遍历所有段落进行替换
for paragraph in doc.paragraphs:
if '{name}' in paragraph.text:
paragraph.text = paragraph.text.replace('{name}', name)
if '{date}' in paragraph.text:
paragraph.text = paragraph.text.replace('{date}', date)
file_name = f"合同_{name}.docx"
doc.save(file_name)
print(f"生成合同:{file_name}")
# 使用示例:模板中需用 {name} 和 {date} 占位
data = {'王小明': '2024-01-01', '赵铁柱': '2024-01-05'}
batch_generate_contracts('合同模板.docx', data)
效果对比:只要准备好名单,一键生成成百上千份Word文档,格式完全统一。
一键总结:模板替换,批量直出。
04. Word 篇:Word 批量转 PDF,格式不乱跑
痛点:发给客户的文档必须是PDF,Word一个个转太慢
Word文档发给别人容易跑版,必须转PDF。虽然Word自带导出功能,但当你有50个文档要转时,重复的“打开-导出-关闭”操作能让人崩溃。
# 运行环境:Windows, Python≥3.8
# pip install docx2pdf
from docx2pdf import convert
import os
def word_to_pdf_batch(folder_path):
# 获取所有docx文件
files = [f for f in os.listdir(folder_path) if f.endswith('.docx')]
print(f"开始转换 {len(files)} 个文件...")
for file in files:
word_path = os.path.join(folder_path, file)
pdf_path = os.path.join(folder_path, file.replace('.docx', '.pdf'))
# 转换操作
convert(word_path, pdf_path)
print(f"转换成功:{pdf_path}")
# 使用示例:转换 'docs' 目录下的所有文档
word_to_pdf_batch('./docs')效果对比:无需打开Word软件,后台静默批量转换,速度极快且保留原格式。
一键总结:格式锁定,一键转换。
05. PPT 篇:从文案大纲一键生成 PPT 骨架
痛点:不仅要写方案,还要一行行粘进PPT
写完Word大纲,还要花大量时间把标题和正文复制到PPT里做成幻灯片。虽然不算难,但这种纯体力活极其消磨从零开始做PPT的热情。
# 运行环境:Python≥3.8
# pip install python-pptx
from pptx import Presentation
def create_ppt_from_text(title_text, content_list, filename):
prs = Presentation()
# 创建封面
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = title_text
slide.placeholders[1].text = "自动生成汇报"
# 创建内容页
for content in content_list:
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = content['title']
slide.placeholders[1].text = content['body']
prs.save(filename)
print(f"PPT已生成:{filename}")
# 使用示例
contents = [
{'title': '项目背景', 'body': '市场需求增长...'},
{'title': '执行计划', 'body': '第一阶段:调研...'}
]
create_ppt_from_text("年度规划", contents, "汇报.pptx")
效果对比:直接把结构化文本变成PPT页面,你只需要专注于美化,省去搬运时间。
一键总结:大纲变片,效率起飞。
06. 邮件篇:自动发送带附件的工资条
痛点:每个人的工资条都不一样,不能群发
HR每月的痛:工资条必须一对一发送,每个人附件不同、正文称呼不同。手动发几百封邮件,不仅手软,发错一个就是重大事故。
# 运行环境:Python≥3.8
# pip install yagmail
import yagmail
import time
def send_salary_emails(sender_email, password, staff_data):
# 连接邮箱服务器 (以QQ邮箱为例)
yag = yagmail.SMTP(user=sender_email, password=password, host='smtp.qq.com')
for staff in staff_data:
email = staff['email']
name = staff['name']
file_path = staff['attachment']
contents = [
f"亲爱的 {name}:",
"这是您本月的工资条,请查收。",
"如有疑问请联系财务部。"
]
# 发送邮件
yag.send(to=email, subject='本月工资条', contents=contents, attachments=file_path)
print(f"已发送给:{name}")
time.sleep(2) # 避免发送过快被封
# 使用示例
staffs = [{'name': '张三', 'email': 'zhangsan@ex.com', 'attachment': '张三_工资.xlsx'}]
# 注意:密码通常是邮箱的授权码
# send_salary_emails('your_email@qq.com', 'your_auth_code', staffs)
效果对比:精准的一对一投递,支持自定义称呼和专属附件,发信零失误。
一键总结:千人千面,自动送达。
07. PDF 篇:多份 PDF 合并为一个文件
痛点:扫描出来的文件全是散页,要把它们拼起来
扫描仪生成了50个PDF单页文件,但领导要一个完整的PDF文档。用在线工具怕泄密,用专业软件要付费,手动拼合简直是折磨。
# 运行环境:Python≥3.8
# pip install pypdf
from pypdf import PdfWriter
import os
def merge_pdfs(folder_path, output_filename):
merger = PdfWriter()
# 按文件名排序
files = sorted([f for f in os.listdir(folder_path) if f.endswith('.pdf')])
for pdf in files:
merger.append(os.path.join(folder_path, pdf))
merger.write(output_filename)
merger.close()
print(f"成功合并 {len(files)} 个文件为 {output_filename}")
# 使用示例
merge_pdfs('./scan_files', '完整合同.pdf')
效果对比:无论多少个散乱的PDF,瞬间整合成一个整洁的文档,且顺序可控。
一键总结:散页归一,整洁有序。
08. PDF 篇:从 PDF 中提取特定页面
痛点:只要几百页文档中的第5到第10页
收到一份巨大的行业报告,你只需要其中关于“市场分析”的那几页发给客户。截图不清晰,打印再扫描太蠢,你需要无损提取。
# 运行环境:Python≥3.8
# pip install pypdf
from pypdf import PdfReader, PdfWriter
def extract_pages(input_pdf, output_pdf, start_page, end_page):
reader = PdfReader(input_pdf)
writer = PdfWriter()
# 页面索引从0开始,所以要减1
# 注意:range不包含结束值,但我们要包含end_page
for i in range(start_page - 1, end_page):
writer.add_page(reader.pages[i])
with open(output_pdf, "wb") as f:
writer.write(f)
print(f"已提取第 {start_page} 到 {end_page} 页")
# 使用示例:提取第 5 到 10 页
extract_pages('行业报告.pdf', '市场分析部分.pdf', 5, 10)
效果对比:精准切割PDF,想取哪页取哪页,无需重新编辑源文件。
一键总结:取其精华,去其糟粕。
09. 文件管理:批量重命名文件,治愈强迫症
痛点:几千个照片文件全是无意义的乱码名
活动拍了几千张照片,文件名全是“IMG_2023…”,需要改成“年会_序号”的格式。手动改名不仅慢,还容易改重名或改错后缀。
# 运行环境:Python≥3.8
# 无需安装第三方库
import os
def batch_rename(folder_path, prefix):
files = os.listdir(folder_path)
count = 1
for file in files:
# 跳过系统文件
if file.startswith('.'): continue
# 获取后缀名
ext = os.path.splitext(file)[1]
new_name = f"{prefix}_{count:03d}{ext}"
old_path = os.path.join(folder_path, file)
new_path = os.path.join(folder_path, new_name)
os.rename(old_path, new_path)
print(f"重命名: {file} -> {new_name}")
count += 1
# 使用示例
batch_rename('./photos', '年会现场')
效果对比:一秒钟让几千个文件整齐划一,支持添加前缀、后缀、序号和日期。
一键总结:批量更名,井井有条。
10. 文件管理:按扩展名自动归类整理桌面
痛点:桌面全是文件,找个文档像大海捞针
桌面堆满了下载的图片、文档、压缩包,乱得像垃圾场。想整理又懒得动,每次找文件都要靠搜索,严重影响心情和效率。
# 运行环境:Python≥3.8
# 无需安装第三方库
import os
import shutil
def organize_desktop(desktop_path):
# 定义分类规则
extensions = {
'图片': ['.jpg', '.png', '.jpeg', '.gif'],
'文档': ['.pdf', '.docx', '.xlsx', '.txt'],
'压缩包': ['.zip', '.rar', '.7z']
}
for file in os.listdir(desktop_path):
file_path = os.path.join(desktop_path, file)
if os.path.isdir(file_path): continue # 跳过文件夹
ext = os.path.splitext(file)[1].lower()
for folder, exts in extensions.items():
if ext in exts:
target_folder = os.path.join(desktop_path, folder)
if not os.path.exists(target_folder):
os.makedirs(target_folder)
shutil.move(file_path, os.path.join(target_folder, file))
print(f"移动 {file} 到 {folder}")
# 使用示例
# organize_desktop(r'C:\Users\YourName\Desktop')
效果对比:运行脚本,杂乱的桌面瞬间变得清清爽爽,所有文件各归其位。
一键总结:桌面整理,一键清爽。
11. 图片处理:批量压缩图片,给硬盘瘦身
痛点:图片太大无法上传,或者硬盘爆满
几十兆的高清图要传到网站或发给客户,经常因为文件过大被拒收。一张张用PS压缩太慢,在线工具又有数量限制。
# 运行环境:Python≥3.8
# pip install Pillow
from PIL import Image
import os
def compress_images(folder_path, quality=60):
output_folder = os.path.join(folder_path, 'compressed')
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for file in os.listdir(folder_path):
if file.lower().endswith(('.png', '.jpg', '.jpeg')):
img_path = os.path.join(folder_path, file)
with Image.open(img_path) as img:
# 转换为RGB模式以防报错
img = img.convert('RGB')
save_path = os.path.join(output_folder, file)
img.save(save_path, quality=quality, optimize=True)
print(f"压缩完成:{file}")
# 使用示例:质量60%
compress_images('./product_imgs', 60)
效果对比:批量将几百兆的图片压缩到十分之一大小,肉眼几乎看不出画质损失。
一键总结:无损瘦身,上传无忧。
12. 图片处理:给敏感图片批量加水印
痛点:不仅要发图,还要防止被盗用或泄密
内部资料截图、设计稿外发,必须加上“仅供内部使用”的水印。手动加水印效率低且位置不统一,脚本可以统一风格。
# 运行环境:Python≥3.8
# pip install Pillow
from PIL import Image, ImageDraw, ImageFont
import os
def add_watermark(folder_path, text):
# 需准备一个字体文件,如 arial.ttf
font = ImageFont.truetype("arial.ttf", 36)
for file in os.listdir(folder_path):
if file.lower().endswith(('.jpg', '.png')):
img = Image.open(os.path.join(folder_path, file))
draw = ImageDraw.Draw(img)
# 在右下角添加水印
width, height = img.size
draw.text((width-200, height-50), text, fill=(255,255,255,128), font=font)
img.save(os.path.join(folder_path, f"watermarked_{file}"))
print(f"已加水印:{file}")
# 使用示例
# add_watermark('./drafts', 'CONFIDENTIAL')
效果对比:所有图片统一位置添加半透明水印,既保护版权又不影响查看。
一键总结:版权保护,滴水不漏。
13. 数据可视化:一键生成销售报表柱状图
痛点:看着密密麻麻的Excel数据,找不到重点
老板想看趋势,你却只给了一堆数字。用Excel做图表虽然行,但每次更新数据都要重新调整图表格式,费时费力。
# 运行环境:Python≥3.8
# pip install pandas matplotlib
import pandas as pd
import matplotlib.pyplot as plt
def generate_bar_chart(csv_file, x_col, y_col):
df = pd.read_csv(csv_file)
# 设置图表大小和风格
plt.figure(figsize=(10, 6))
plt.bar(df[x_col], df[y_col], color='skyblue')
plt.title('销售数据概览')
plt.xlabel(x_col)
plt.ylabel(y_col)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('chart_output.png')
print("图表已生成:chart_output.png")
# 使用示例
# generate_bar_chart('sales.csv', '月份', '销售额')
效果对比:数据更新后,一键生成美观的报表图,直接插入PPT,汇报更有说服力。
一键总结:数据说话,一目了然。
14. 爬虫取数:抓取新闻标题,快速了解行业动态
痛点:每天手动浏览几十个网站收集资讯
做市场调研或竞品分析,每天要打开一堆网站看有没有新文章。人工刷新不仅慢,还容易漏掉重要信息。
# 运行环境:Python≥3.8
# pip install requests beautifulsoup4
import requests
from bs4 import BeautifulSoup
def fetch_titles(url):
headers = {'User-Agent': 'Mozilla/5.0'}
try:
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 假设标题在 h2 标签中,具体需根据网站调整
titles = soup.find_all('h2')
for idx, title in enumerate(titles[:10], 1):
print(f"{idx}. {title.get_text().strip()}")
except Exception as e:
print(f"抓取失败: {e}")
# 使用示例 (请遵守网站robots协议)
# fetch_titles('https://news.ycombinator.com/')
效果对比:一杯咖啡的时间,脚本自动帮你把几十个网站的最新标题抓取并汇总。
一键总结:资讯聚合,快人一步。
15. 日程提醒:重要会议不错过,桌面弹窗提醒
痛点:忙起来忘了时间,错过重要会议
埋头写代码或做表,完全忘了下午三点有会。手机提醒有时候没听到,电脑屏幕上的强弹窗才是最有效的提醒。
# 运行环境:Python≥3.8
# pip install plyer
from plyer import notification
import time
def schedule_reminder(title, message, delay_seconds):
print(f"提醒设置成功,{delay_seconds}秒后提醒...")
time.sleep(delay_seconds)
notification.notify(
title=title,
message=message,
app_name='办公助手',
timeout=10
)
# 使用示例:1小时(3600秒)后提醒喝水
schedule_reminder("休息提醒", "工作一小时了,起来喝杯水!", 3600)
效果对比:在电脑右下角弹出原生通知,无法忽视的强提醒,拯救健忘症。
一键总结:贴身管家,准时提醒。
16. 工具类:生成二维码,方便手机查看链接
痛点:电脑上的长链接,想发给手机看
电脑上查到一个很棒的资料,想在手机上打开或者发到微信群。手打网址是不可能的,复制发送又麻烦,不如直接转码扫一扫。
# 运行环境:Python≥3.8
# pip install qrcode[pil]
import qrcode
def generate_qrcode(url, filename='qrcode.png'):
qr = qrcode.QRCode(
version=1,
box_size=10,
border=5
)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save(filename)
print(f"二维码已生成:{filename}")
# 使用示例
generate_qrcode('https://www.python.org')
效果对比:任何文本或链接一键转为高清二维码,手机扫一扫即达,分享超便捷。
一键总结:码上连接,跨屏无缝。
17. 工具类:监控网页变化,抢票抢课必备
痛点:一直刷网页看有没有名额,浪费时间
想买的票、想报的课、想抢的号,不知道什么时候放出。人工盯着屏幕刷不仅累,还刷不过别人。
# 运行环境:Python≥3.8
# pip install requests
import requests
import time
def monitor_website(url, keyword):
print(f"开始监控 {url}...")
headers = {'User-Agent': 'Mozilla/5.0'}
while True:
try:
response = requests.get(url, headers=headers)
if keyword in response.text:
print(f"【发现目标】关键词 '{keyword}' 出现了!")
break
else:
print("暂无变化,10秒后重试...")
except:
print("网络请求错误")
time.sleep(10)
# 使用示例
# monitor_website('http://example.com/tickets', '有票')
效果对比:24小时不间断监控,一旦页面出现关键词立即报警,彻底解放双眼。
一键总结:全天盯梢,毫秒响应。
18. 数据处理:JSON 数据转 CSV,方便Excel查看
痛点:IT给的数据是JSON,Excel打不开
开发给你的数据导出是JSON格式,像乱码一样,根本没法做透 视表。你需要把它转换成Excel能识别的CSV表格。
# 运行环境:Python≥3.8
# 无需安装第三方库
import json
import csv
def json_to_csv(json_file, csv_file):
with open(json_file, 'r', encoding='utf-8') as f:
data = json.load(f)
# 假设data是列表且元素为字典
if not data: return
keys = data[0].keys()
with open(csv_file, 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=keys)
writer.writeheader()
writer.writerows(data)
print(f"转换完成:{csv_file}")
# 使用示例
# json_to_csv('data.json', 'data.csv')
效果对比:复杂的数据结构瞬间变成整齐的表格,人人都能看懂,人人都能分析。
一键总结:格式转换,数据可视。
19. 会议整理:语音转文字,会议纪要神器 (调用API版)
痛点:开会录音两小时,整理纪要两小时
录音笔录了一堆,回去要反复听写整理,效率极低。虽然有现成软件,但自制脚本可以对接更精准的云服务。
# 运行环境:Python≥3.8
# pip install SpeechRecognition
# 需安装 ffmpeg
import speech_recognition as sr
def audio_to_text(audio_file):
r = sr.Recognizer()
with sr.AudioFile(audio_file) as source:
print("正在读取音频...")
audio_data = r.record(source)
try:
# 这里使用默认的 Google API,实际建议替换为百度/讯飞API
text = r.recognize_google(audio_data, language='zh-CN')
print("识别结果:")
print(text)
except sr.UnknownValueError:
print("无法识别音频内容")
except sr.RequestError:
print("请求服务失败")
# 使用示例 (仅支持 wav 等特定格式)
# audio_to_text('meeting_clip.wav')
效果对比:虽然简陋,但能快速将清晰的语音转为文本草稿,大幅缩减听写时间。
一键总结:听音辨字,解放双手。
20. 安全实用:随机生成强密码,保护账号安全
痛点:所有账号都用一个密码,一盗全盗
为了好记,所有平台都用同一个密码。一旦某个小网站泄露,支付宝和微信都危险了。你需要为每个平台生成不同的强密码。
# 运行环境:Python≥3.8
# 无需安装第三方库
import string
import secrets
def generate_password(length=12):
# 包含大小写字母、数字和特殊字符
alphabet = string.ascii_letters + string.digits + string.punctuation
password = ''.join(secrets.choice(alphabet) for i in range(length))
print(f"生成的强密码:{password}")
return password
# 使用示例:生成3个16位强密码
for _ in range(3):
generate_password(16)
效果对比:生成包含各种字符的随机密码,黑客根本猜不到,账号安全等级Max。
一键总结:安全设防,隐患归零。
以上就是20个职场人必须会的Python办公脚本分享的详细内容,更多关于Python办公脚本的资料请关注脚本之家其它相关文章!
