python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python办公脚本

20个职场人必须会的Python办公脚本分享

作者:小庄-Python办公

在这个数据爆炸的时代,Python 早就不是程序员的专属,它是每个职场人手里最强的武器,本文分享了20个拿来就能用的Python脚本,直接解决你90%的重复劳动,希望对大家有所帮助

如果你还在每天复制粘贴到深夜,或者因为合并几百个表格而想砸电脑,请立刻停下!在这个数据爆炸的时代,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办公脚本的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文