🏠 首页 攻略 RPA办公自动化入门:用UiPath和Python把重复工作交给机器人

RPA办公自动化入门:用UiPath和Python把重复工作交给机器人

RPA(机器人流程自动化)能帮你自动处理Excel、邮件、网页填报等重复办公任务。本文从零基础讲起,用UiPath和Python各做一个真实案例,适合不想加班的你。

RPA办公自动化入门:用UiPath和Python把重复工作交给机器人

你是不是也有这样的日常?每天早上打开电脑,先下载昨天的销售报表,复制到Excel里汇总,再根据数据发一封邮件给各部门负责人。这些动作机械、无聊,但每天都得做。

RPA(Robot Process Automation,机器人流程自动化)就是来解决这个问题的。它不需要你写复杂的代码,也不需要改现有系统,直接模拟人的操作来完成重复任务。

今天我用两个真实场景,带你快速上手RPA。一个用UiPath(可视化拖拽),一个用Python(轻量脚本)。


什么是RPA?

RPA的本质是一个"数字员工"。它不能思考,但能精准执行。它的核心能力包括:

  • 读取屏幕内容:识别窗口、按钮、表格
  • 模拟鼠标键盘:点击、输入、复制粘贴
  • 操作文件:读写Excel、PDF、CSV
  • 发送邮件:调用Outlook或SMTP协议
  • 条件判断:根据数据决定下一步动作

与传统编程的区别在于,RPA不需要你有API权限,也不需要修改现有系统。它就像一个人坐在电脑前干活——只不过它不会累,不会犯错,而且速度更快。


场景一:用UiPath自动处理每日销售报表

假设你每天需要从公司系统导出销售数据,整理成固定格式的Excel,然后发邮件给团队。

准备工作

  1. 安装 UiPath Studio(社区版免费)
  2. 新建一个"Robotic Process"项目
  3. 在Package Manager中安装以下包:
    • UiPath.Excel.Activities
    • UiPath.Mail.Activities
    • UiPath.UIAutomation.Activities

流程设计

UiPath的核心是"顺序流程"(Sequence),我把整个流程拆成4个步骤:

步骤1:打开系统并导出数据

用"Open Browser"活动连接公司系统,然后用"Click"活动找到导出按钮。关键是用"Find Icon"来精确定位,而不是靠坐标。

Open Browser → Type Into(账号) → Type Into(密码) → Click(登录)
→ Click(数据菜单) → Click(导出Excel) → Wait(文件下载完成)

步骤2:数据清洗和格式化

用Excel相关的Activities来处理:

Excel Application Scope(打开模板.xlsx)
→ Read Range(读取销售数据)
→ Filter Data Table(筛选今日数据)
→ Sort Data Table(按金额降序)
→ Write Range(写入新sheet)
→ Save As(保存为今日报表.xlsx)

这里有个实用技巧:用"Data Table"而不是直接操作单元格。数据处理速度快10倍以上。

步骤3:生成摘要邮件

Read Range(读取汇总sheet)
→ For Each Row(遍历数据)
→ Append Line(拼邮件正文)
→ Send Outlook Mail Message

邮件模板建议这样写:

各位好,

今日销售报表已生成,请查收附件。

核心数据:

  • 今日订单数:XX单
  • 销售额:¥XX,XXX
  • 环比昨日:+X.X%

详细数据见附件。

步骤4:归档和清理

Move File(日报表移动到归档文件夹)
→ Delete(删除临时文件)
→ Log Message(记录执行结果)

设置定时触发

在UiPath Orchestrator里设置Schedule,比如每天早上8点自动运行。这样你到公司的时候,报表已经在邮箱里了。


场景二:用Python做轻量级RPA

如果你不想装UiPath,Python也能搞定大部分自动化任务。下面是一个真实案例:自动整理文件夹里的发票PDF。

环境准备

pip install pandas openpyxl pdfplumber python-dotenv schedule

完整代码示例

import os
import shutil
from pathlib import Path
import pandas as pd
import pdfplumber
from datetime import datetime
import schedule
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# 配置
INVOICE_DIR = Path("./invoices")
REPORT_PATH = Path("./daily_report.xlsx")
ARCHIVE_DIR = Path("./archived")

def extract_invoice_data(pdf_path):
    """从PDF发票中提取关键字段"""
    data = {
        "filename": pdf_path.name,
        "invoice_date": "",
        "amount": 0,
        "seller": ""
    }
    
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            text = page.extract_text()
            if not text:
                continue
            
            # 提取日期(匹配常见格式)
            for line in text.split('\n'):
                if '日期' in line or 'date' in line.lower():
                    parts = line.split(':')
                    if len(parts) > 1:
                        data["invoice_date"] = parts[-1].strip()
                
                # 提取金额
                if '金额' in line or 'total' in line.lower():
                    parts = line.split(':')
                    if len(parts) > 1:
                        try:
                            data["amount"] = float(parts[-1].strip().replace(',', ''))
                        except ValueError:
                            pass
                
                # 提取卖方
                if '销售方' in line or 'seller' in line.lower():
                    parts = line.split(':')
                    if len(parts) > 1:
                        data["seller"] = parts[-1].strip()
    
    return data

def process_invoices():
    """处理所有发票并生成报表"""
    results = []
    
    for pdf_file in INVOICE_DIR.glob("*.pdf"):
        try:
            data = extract_invoice_data(pdf_file)
            results.append(data)
            
            # 移动到归档目录
            ARCHIVE_DIR.mkdir(exist_ok=True)
            shutil.move(str(pdf_file), str(ARCHIVE_DIR / pdf_file.name))
        except Exception as e:
            results.append({
                "filename": pdf_file.name,
                "invoice_date": "",
                "amount": 0,
                "seller": f"ERROR: {str(e)}"
            })
    
    # 生成Excel报表
    df = pd.DataFrame(results)
    df.to_excel(REPORT_PATH, index=False)
    
    # 计算汇总
    total_amount = df['amount'].sum()
    print(f"今日处理 {len(df)} 张发票,总金额 ¥{total_amount:,.2f}")
    
    return df

def send_report_email(df):
    """发送日报邮件"""
    msg = MIMEMultipart()
    msg['From'] = "your_email@company.com"
    msg['To'] = "team@company.com"
    msg['Subject'] = f"发票日报 - {datetime.now().strftime('%Y-%m-%d')}"
    
    body = f"""
    各位同事,今日发票处理完成。
    
    - 处理数量:{len(df)}    - 总金额:¥{df['amount'].sum():,.2f}
    - 详细报表请见附件
    
    此邮件由RPA自动发送。
    """
    
    msg.attach(MIMEText(body, 'html', 'utf-8'))
    
    # 附加Excel文件
    with open(REPORT_PATH, 'rb') as f:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(f.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', 
                       f'attachment; filename="{REPORT_PATH.name}"')
        msg.attach(part)
    
    # 发送邮件
    server = smtplib.SMTP('smtp.company.com', 587)
    server.starttls()
    server.login("your_email@company.com", "password")
    server.send_message(msg)
    server.quit()
    print("邮件已发送")

if __name__ == "__main__":
    df = process_invoices()
    send_report_email(df)

让Python脚本定时运行

schedule 库可以设置简单定时:

schedule.every().day.at("09:00").do(process_invoices)

while True:
    schedule.run_pending()
    import time
    time.sleep(60)

或者更简单地,直接用Linux的cron:

# 编辑crontab
crontab -e

# 添加这一行(每天早上9点执行)
0 9 * * * cd /path/to/project && python automate.py >> logs/automation.log 2>&1

两种方案怎么选?

对比项UiPathPython
学习门槛低(拖拽式)中(需基础编程)
适用场景复杂UI交互、企业级文件处理、数据清洗
维护成本中(需要Orchestrator)低(纯脚本)
灵活性受限于内置活动几乎无限
适合人群业务人员、非程序员开发者、数据分析师

我的建议是:从Python开始。大多数办公自动化场景(处理Excel、发邮件、整理文件)用Python几行代码就能解决。只有当你的流程涉及大量UI交互(比如要操作一个没有API的老系统)时,才考虑UiPath这类可视化RPA工具。


避坑指南

1. 不要一开始就追求完美

RPA的第一版只要能跑就行。先把流程走通,再逐步优化。很多团队花三个月设计"完美的自动化方案",最后发现需求早就变了。

2. 做好异常处理

网络断了怎么办?文件格式变了怎么办?邮件发送失败怎么办?每个环节都要有fallback。Python里用try-except,UiPath里用Try Catch活动。

3. 保留日志

自动化最怕的是"不知道哪里出了问题"。每步操作都记录日志,出问题能快速定位。

4. 别自动化不该自动化的东西

如果一个流程一年只做几次,手动做可能比搭建自动化系统更划算。RPA最适合的是高频、规则明确的重复任务。


下一步行动

今天就可以做一件事:找出你每周重复做一次的办公任务,用上面的方法写个脚本跑起来。哪怕只是用Python自动重命名文件,也比手动快。

你的日常工作里,哪个环节最浪费时间?说出来,我们一起想想怎么自动化。