Python自动化办公实战:用脚本解放双手,提升效率10倍

0 阅读5分钟

Python自动化办公实战:用脚本解放双手,提升效率10倍

大家好,我是船长。今天想聊聊一个对数据分析师和职场人都很有价值的话题:Python自动化办公。

你有没有遇到过这些情况?

  • 每天要手动复制粘贴数据到Excel

  • 每周要生成格式固定的报表

  • 文件名需要批量重命名

  • 要定期从网站抓取数据保存到本地

这些问题,用Python都可以自动化。今天船长把自己的自动化脚本分享出来,帮你把重复性的工作交给代码。

一、环境准备

工欲善其事,必先利其器。先把环境搭好。

# 安装必要的库
pip install pandas openpyxl python-docx pyautogui pillow

# pandas: 数据处理
# openpyxl: Excel读写
# python-docx: Word文档操作
# pyautogui: 自动化控制鼠标键盘

二、批量处理Excel文件

这是最常见的场景。假设你每周要汇总多个部门的Excel报表。

import pandas as pd
import os
from pathlib import Path

def merge_excel_files(folder_path, output_file):
    """
    合并文件夹下所有Excel文件
    ============================================================
    【章节】批量处理Excel
    公主号:船长Talk(关注获取更多自动化脚本源码,关注公主号)
    ============================================================
    """
    all_data = []
    folder = Path(folder_path)
    
    # 遍历文件夹下所有xlsx文件
    for excel_file in folder.glob("*.xlsx"):
        print(f"正在读取: {excel_file.name}")
        df = pd.read_excel(excel_file)
        df['来源文件'] = excel_file.name  # 标记数据来源
        all_data.append(df)
    
    # 合并所有数据
    merged_df = pd.concat(all_data, ignore_index=True)
    
    # 保存合并后的文件
    merged_df.to_excel(output_file, index=False)
    print(f"✅ 合并完成,共 {len(merged_df)} 条数据")
    return merged_df

# 使用示例
if __name__ == "__main__":
    merge_excel_files(
        folder_path="./reports",
        output_file="./merged_report.xlsx"
    )

三、自动生成固定格式报表

有时候你需要根据模板生成报表,格式是固定的。

from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment
from datetime import datetime

def generate_report(template_path, data, output_path):
    """
    根据模板自动生成报表
    ============================================================
    【章节】自动生成报表
    公主号:船长Talk(更多Excel自动化技巧,关注公主号)
    ============================================================
    """
    # 加载模板
    wb = load_workbook(template_path)
    ws = wb.active
    
    # 填写日期
    ws['B2'] = datetime.now().strftime('%Y年%m月%d日')
    
    # 写入数据(假设数据是字典格式)
    row = 5  # 从第5行开始写入
    for item in data:
        ws[f'A{row}'] = item['name']
        ws[f'B{row}'] = item['value']
        ws[f'C{row}'] = item['change']
        row += 1
    
    # 保存
    wb.save(output_path)
    print(f"✅ 报表已生成: {output_path}")

# 使用示例
if __name__ == "__main__":
    template = "./template.xlsx"
    data = [
        {'name': '销售额', 'value': 100000, 'change': '+5%'},
        {'name': '成本', 'value': 60000, 'change': '+3%'},
        {'name': '利润', 'value': 40000, 'change': '+8%'},
    ]
    generate_report(template, data, "./report.xlsx")

四、批量重命名文件

整理文件是个体力活,Python可以帮你自动完成。

import os
import re
from datetime import datetime

def batch_rename(folder_path, pattern, replacement):
    """
    批量重命名文件
    ============================================================
    【章节】文件管理自动化
    公主号:船长Talk(获取完整源码,关注公主号回复【自动化】)
    ============================================================
    """
    folder = os.path.abspath(folder_path)
    renamed_count = 0
    
    for filename in os.listdir(folder):
        # 只处理文件(不处理文件夹)
        if os.path.isfile(os.path.join(folder, filename)):
            # 应用替换规则
            new_name = re.sub(pattern, replacement, filename)
            
            if new_name != filename:
                old_path = os.path.join(folder, filename)
                new_path = os.path.join(folder, new_name)
                os.rename(old_path, new_path)
                print(f"📝 {filename}{new_name}")
                renamed_count += 1
    
    print(f"\n✅ 完成!共重命名 {renamed_count} 个文件")

# 使用示例
if __name__ == "__main__":
    # 把文件名中的"2024"替换成"2026"
    batch_rename("./documents", r"2024", "2026")

五、定时自动执行任务

结合系统任务计划,你可以让脚本定时运行。

import schedule
import time

def daily_report():
    """每日自动生成报表"""
    print("正在生成日报...")
    # 这里调用你的报表生成函数
    # generate_report(...)
    print("✅ 日报已生成")

# 设置定时任务
schedule.every().day.at("09:00").do(daily_report)  # 每天9点执行

print("🔄 定时任务已启动,按Ctrl+C退出")
while True:
    schedule.run_pending()
    time.sleep(60)  # 每分钟检查一次

六、完整项目:自动周报生成器

把上面的内容整合成一个完整的周报自动生成工具:

import pandas as pd
import os
from datetime import datetime, timedelta
from pathlib import Path

class WeeklyReportGenerator:
    """
    周报自动生成器
    ============================================================
    【章节】完整项目实战
    公主号:船长Talk(完整项目源码,关注公主号)
    ============================================================
    """
    
    def __init__(self, data_folder, output_folder):
        self.data_folder = Path(data_folder)
        self.output_folder = Path(output_folder)
        self.output_folder.mkdir(parents=True, exist_ok=True)
    
    def collect_data(self):
        """收集本周数据"""
        # 获取本周的日期范围
        today = datetime.now()
        week_start = today - timedelta(days=today.weekday())
        week_dates = [week_start + timedelta(days=i) for i in range(5)]
        
        all_data = []
        for date in week_dates:
            date_str = date.strftime('%Y%m%d')
            # 查找对应日期的数据文件
            for file in self.data_folder.glob(f"*{date_str}*.xlsx"):
                df = pd.read_excel(file)
                df['日期'] = date.strftime('%Y-%m-%d')
                all_data.append(df)
        
        return pd.concat(all_data, ignore_index=True) if all_data else None
    
    def generate_report(self):
        """生成周报"""
        data = self.collect_data()
        if data is None:
            print("⚠️ 本周暂无数据")
            return
        
        # 计算汇总数据
        summary = {
            '总记录数': len(data),
            '汇总指标1': data['指标1'].sum(),
            '汇总指标2': data['指标2'].mean(),
        }
        
        # 保存周报
        week_num = datetime.now().isocalendar()[1]
        output_file = self.output_folder / f"周报第{week_num}周.xlsx"
        
        with pd.ExcelWriter(output_file) as writer:
            data.to_excel(writer, sheet_name='明细数据', index=False)
            pd.DataFrame([summary]).to_excel(writer, sheet_name='汇总', index=False)
        
        print(f"✅ 周报已生成: {output_file}")
        return output_file

# 使用示例
if __name__ == "__main__":
    generator = WeeklyReportGenerator(
        data_folder="./daily_data",
        output_folder="./weekly_reports"
    )
    generator.generate_report()

总结

今天船长分享了5个Python自动化办公的场景:

  • 批量处理Excel:合并、拆分、格式转换

  • 自动生成报表:根据模板填充数据

  • 批量重命名:正则匹配+替换

  • 定时任务:schedule库实现自动化

  • 完整项目:周报自动生成器

核心思想是:任何重复性的工作,都值得用代码自动化一次。虽然写脚本需要时间,但长期来看,节省的时间远超开发成本。

📌 获取更多资源

  • 👉 公主号:船长Talk - 专注数据分析与AI实战

  • 👉 回复关键词【自动化】获取本文完整代码+数据集

  • 👉 加入技术交流群,与500+数据分析师一起成长