上一篇 下一篇 分享链接 返回 返回顶部

把日报、表格和通知串起来:一套可直接上手的办公自动化流程源码

发布人:慈云数据-客服中心 发布时间:15小时前 阅读量:4

AI办公 工作流自动化教程|附源码

在日常办公中,很多工作并不复杂,却非常耗时:整理邮件、汇总表格、生成日报、同步待办、提取文档重点、把会议纪要发送到群里……这些任务往往具有一个共同特点:规则相对固定、重复频率高、人工处理价值低

随着大模型、API、自动化工具的发展,我们已经可以用较低成本搭建一套属于自己的 AI 办公自动化工作流。本文将从实际办公场景出发,介绍如何设计 AI 工作流,并提供一套可运行的 Python 示例源码,帮助你完成从“手动办公”到“自动化办公”的升级。


一、什么是 AI 办公工作流自动化?

AI 办公工作流自动化,是指将办公中的多个步骤串联起来,通过程序、自动化平台或 AI 模型自动完成任务。

例如,传统流程可能是:

  1. 打开邮箱;
  2. 阅读客户邮件;
  3. 复制关键信息;
  4. 打开 Excel;
  5. 填写客户需求;
  6. 手动总结;
  7. 发给同事或保存到日报。

而自动化之后,可以变成:

  1. 程序自动读取邮件;
  2. AI 自动提取客户姓名、需求、预算、截止时间;
  3. 自动写入 Excel 或数据库;
  4. 自动生成摘要;
  5. 自动发送到企业微信、钉钉或飞书。

这就是 AI 工作流自动化的价值:减少重复劳动,提高信息处理效率,让人把时间花在判断和决策上。


二、适合自动化的办公场景

并不是所有办公任务都适合自动化。一般来说,以下类型的任务非常适合引入 AI 工作流。

1. 文档总结类

例如:

  • 会议纪要总结;
  • 长文档提炼重点;
  • 合同条款初步归纳;
  • 项目报告生成摘要;
  • 客户邮件意图识别。

这类任务可以借助大模型完成信息压缩和结构化输出。

2. 表格处理类

例如:

  • Excel 数据清洗;
  • 销售日报汇总;
  • 财务数据分类;
  • 客户名单去重;
  • 根据表格生成分析报告。

这类任务适合用 Python 的 pandas 配合 AI 完成。

3. 消息通知类

例如:

  • 每天定时发送工作日报;
  • 销售线索自动推送;
  • 任务即将超期提醒;
  • 系统异常自动通知负责人。

这类任务可以结合定时任务和 Webhook 实现。

4. 内容生成类

例如:

  • 自动生成周报;
  • 根据关键词生成文章大纲;
  • 根据会议记录生成行动项;
  • 根据客户需求生成回复邮件。

这类任务非常适合使用 AI 模型辅助完成。


三、本文要实现的自动化工作流

本文将实现一个简单但实用的 AI 办公工作流:

读取 Excel 中的任务数据 → 调用 AI 生成每条任务摘要和建议 → 生成日报 Markdown 文件 → 可选发送到企业微信机器人。

这个工作流非常适合用于:

  • 项目管理日报;
  • 销售线索跟进;
  • 客服工单总结;
  • 团队任务进度汇报;
  • 运营数据简报。

四、工作流整体架构

整个流程可以拆成以下几个模块:

Excel任务数据
    ↓
Python读取表格
    ↓
AI分析任务内容
    ↓
生成结构化结果
    ↓
输出日报Markdown
    ↓
发送通知(可选)

在实际企业办公中,你可以把 Excel 换成数据库、飞书表格、Notion、Airtable 或 CRM 系统;也可以把输出日报换成邮件、钉钉消息、企业微信消息或自动创建文档。


五、准备工作

1. 安装 Python

建议使用 Python 3.9 及以上版本。

可以在终端执行:

python --version

如果没有安装,可以前往 Python 官网下载安装。


2. 安装依赖库

本文示例会用到以下库:

pip install pandas openpyxl requests python-dotenv

各库作用如下:

库名 作用
pandas 读取和处理 Excel 数据
openpyxl 支持 Excel 文件解析
requests 调用 API 和发送 Webhook
python-dotenv 读取环境变量配置

3. 准备项目目录

创建一个项目文件夹,例如:

ai-office-workflow/
├── main.py
├── config.py
├── ai_client.py
├── report_generator.py
├── notifier.py
├── tasks.xlsx
├── .env
└── output/

其中:

  • main.py:主程序入口;
  • config.py:配置读取;
  • ai_client.py:AI 接口调用;
  • report_generator.py:日报生成;
  • notifier.py:消息通知;
  • tasks.xlsx:任务数据源;
  • .env:保存密钥和 Webhook;
  • output/:保存生成的日报文件。

六、准备 Excel 数据

创建一个名为 tasks.xlsx 的 Excel 文件,内容如下:

任务ID 负责人 项目 任务描述 当前状态 截止日期
T001 张三 官网改版 完成首页视觉设计并确认交互方案 进行中 2025-01-10
T002 李四 客户跟进 跟进A客户报价反馈,确认预算和采购周期 待处理 2025-01-08
T003 王五 数据分析 分析上周用户注册数据并输出增长建议 已完成 2025-01-06
T004 赵六 内容运营 准备下周公众号选题和活动文案 进行中 2025-01-12

实际使用时,你可以根据自己的业务调整字段,例如增加优先级、部门、客户名称、金额等。


七、配置环境变量

创建 .env 文件:

AI_API_KEY=your_api_key_here
AI_API_URL=https://api.example.com/v1/chat/completions

WECHAT_WEBHOOK=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key_here

说明:

  • AI_API_KEY:你的 AI 模型 API Key;
  • AI_API_URL:AI 接口地址;
  • WECHAT_WEBHOOK:企业微信机器人 Webhook,如果不需要发送通知,可以留空。

注意:不要把 .env 文件上传到公开代码仓库,因为里面通常包含密钥。


八、源码实现

下面开始编写完整代码。


1. 配置文件:config.py

import os
from dotenv import load_dotenv

load_dotenv()

AI_API_KEY = os.getenv("AI_API_KEY", "")
AI_API_URL = os.getenv("AI_API_URL", "")

WECHAT_WEBHOOK = os.getenv("WECHAT_WEBHOOK", "")

TASK_FILE = "tasks.xlsx"
OUTPUT_DIR = "output"

这个文件负责从 .env 中读取配置,避免把密钥直接写在代码里。


2. AI 调用模块:ai_client.py

import requests
from config import AI_API_KEY, AI_API_URL


def analyze_task_with_ai(task: dict) -> dict:
    """
    调用 AI 分析单条任务,返回摘要、风险和建议。
    """

    if not AI_API_KEY or not AI_API_URL:
        return mock_ai_response(task)

    prompt = f"""
你是一名专业的项目管理助手,请根据以下任务信息生成分析结果。

任务ID:{task.get("任务ID")}
负责人:{task.get("负责人")}
项目:{task.get("项目")}
任务描述:{task.get("任务描述")}
当前状态:{task.get("当前状态")}
截止日期:{task.get("截止日期")}

请用 JSON 格式输出,字段包括:
summary:一句话任务摘要;
risk:当前可能存在的风险;
suggestion:下一步行动建议。

要求:
1. 输出必须是 JSON;
2. 不要输出多余解释;
3. 内容简洁、清晰、适合日报使用。
"""

    headers = {
        "Authorization": f"Bearer {AI_API_KEY}",
        "Content-Type": "application/json"
    }

    payload = {
        "model": "gpt-4o-mini",
        "messages": [
            {
                "role": "system",
                "content": "你是一个擅长办公自动化和项目管理分析的AI助手。"
            },
            {
                "role": "user",
                "content": prompt
            }
        ],
        "temperature": 0.3
    }

    try:
        response = requests.post(
            AI_API_URL,
            headers=headers,
            json=payload,
            timeout=30
        )
        response.raise_for_status()

        data = response.json()
        content = data["choices"][0]["message"]["content"]

        return parse_ai_json(content)

    except Exception as e:
        print(f"AI调用失败,使用模拟结果。错误信息:{e}")
        return mock_ai_response(task)


def parse_ai_json(content: str) -> dict:
    """
    简单解析 AI 返回内容。
    实际项目中建议增加更严格的 JSON 解析和异常处理。
    """

    import json
    import re

    try:
        return json.loads(content)
    except Exception:
        match = re.search(r"\{.*\}", content, re.S)
        if match:
            try:
                return json.loads(match.group())
            except Exception:
                pass

    return {
        "summary": "AI返回结果解析失败",
        "risk": "无法识别风险",
        "suggestion": "建议人工检查该任务"
    }


def mock_ai_response(task: dict) -> dict:
    """
    当未配置 AI Key 时,返回模拟分析结果,方便本地测试。
    """

    status = task.get("当前状态", "")
    desc = task.get("任务描述", "")

    if status == "已完成":
        risk = "暂无明显风险"
        suggestion = "建议整理产出物并同步相关成员"
    elif status == "待处理":
        risk = "任务尚未启动,可能影响交付节奏"
        suggestion = "建议负责人尽快确认优先级并启动处理"
    else:
        risk = "需关注任务进度是否符合截止日期要求"
        suggestion = "建议每日同步进展,及时暴露阻塞点"

    return {
        "summary": f"{task.get('负责人')}负责的任务:{desc}",
        "risk": risk,
        "suggestion": suggestion
    }

这个模块做了三件事:

  1. 构造 Prompt;
  2. 调用 AI API;
  3. 解析 AI 输出。

为了方便本地测试,代码中增加了 mock_ai_response。如果你没有配置 API Key,也能看到完整流程效果。


3. 日报生成模块:report_generator.py

import os
from datetime import datetime
from config import OUTPUT_DIR


def generate_markdown_report(tasks: list) -> str:
    """
    根据任务分析结果生成 Markdown 日报。
    """

    today = datetime.now().strftime("%Y-%m-%d")

    lines = []
    lines.append(f"# AI自动生成工作日报({today})")
    lines.append("")
    lines.append("## 一、今日任务概览")
    lines.append("")
    lines.append(f"- 任务总数:{len(tasks)}")
    lines.append(f"- 已完成:{count_by_status(tasks, '已完成')}")
    lines.append(f"- 进行中:{count_by_status(tasks, '进行中')}")
    lines.append(f"- 待处理:{count_by_status(tasks, '待处理')}")
    lines.append("")
    lines.append("## 二、任务明细")
    lines.append("")

    for item in tasks:
        lines.append(f"### {item.get('任务ID')}|{item.get('项目')}")
        lines.append("")
        lines.append(f"- 负责人:{item.get('负责人')}")
        lines.append(f"- 当前状态:{item.get('当前状态')}")
        lines.append(f"- 截止日期:{item.get('截止日期')}")
        lines.append(f"- 任务描述:{item.get('任务描述')}")
        lines.append(f"- AI摘要:{item.get('summary')}")
        lines.append(f"- 风险判断:{item.get('risk')}")
        lines.append(f"- 行动建议:{item.get('suggestion')}")
        lines.append("")

    lines.append("## 三、AI综合建议")
    lines.append("")
    lines.append(generate_overall_suggestion(tasks))
    lines.append("")
    lines.append("---")
    lines.append("")
    lines.append("本日报由 AI 办公自动化工作流自动生成。")

    return "\n".join(lines)


def count_by_status(tasks: list, status: str) -> int:
    return sum(1 for task in tasks if task.get("当前状态") == status)


def generate_overall_suggestion(tasks: list) -> str:
    pending = count_by_status(tasks, "待处理")
    doing = count_by_status(tasks, "进行中")

    suggestions = []

    if pending > 0:
        suggestions.append(f"- 当前有 {pending} 项任务仍处于待处理状态,建议尽快明确负责人和启动时间。")

    if doing > 0:
        suggestions.append(f"- 当前有 {doing} 项任务正在进行中,建议关注截止日期并及时同步阻塞问题。")

    if not suggestions:
        suggestions.append("- 当前任务整体进展良好,建议持续跟踪交付质量和结果复盘。")

    return "\n".join(suggestions)


def save_report(content: str) -> str:
    """
    保存日报文件。
    """

    if not os.path.exists(OUTPUT_DIR):
        os.makedirs(OUTPUT_DIR)

    filename = datetime.now().strftime("daily_report_%Y%m%d.md")
    filepath = os.path.join(OUTPUT_DIR, filename)

    with open(filepath, "w", encoding="utf-8") as f:
        f.write(content)

    return filepath

这个模块负责生成 Markdown 日报。Markdown 的好处是格式清晰,可以直接复制到飞书文档、Notion、语雀、企业微信或邮件中。


4. 通知模块:notifier.py

import requests
from config import WECHAT_WEBHOOK


def send_wechat_markdown(content: str):
    """
    通过企业微信机器人发送 Markdown 消息。
    """

    if not WECHAT_WEBHOOK:
        print("未配置企业微信 Webhook,跳过消息发送。")
        return

    max_length = 3500
    if len(content) > max_length:
        content = content[:max_length] + "\n\n内容过长,已截断,请查看完整日报文件。"

    payload = {
        "msgtype": "markdown",
        "markdown": {
            "content": content
        }
    }

    try:
        response = requests.post(
            WECHAT_WEBHOOK,
            json=payload,
            timeout=10
        )
        response.raise_for_status()
        print("企业微信消息发送成功。")

    except Exception as e:
        print(f"企业微信消息发送失败:{e}")

这个模块用于把日报发送到企业微信群机器人。很多团队每天都需要发日报,如果将其自动化,可以减少大量重复操作。


5. 主程序入口:main.py

import pandas as pd

from config import TASK_FILE
from ai_client import analyze_task_with_ai
from report_generator import generate_markdown_report, save_report
from notifier import send_wechat_markdown


def load_tasks_from_excel(filepath: str) -> list:
    """
    从 Excel 读取任务数据。
    """

    df = pd.read_excel(filepath)

    required_columns = ["任务ID", "负责人", "项目", "任务描述", "当前状态", "截止日期"]

    for column in required_columns:
        if column not in df.columns:
            raise ValueError(f"Excel 缺少必要字段:{column}")

    df = df.fillna("")

    return df.to_dict(orient="records")


def main():
    print("开始读取任务数据...")
    tasks = load_tasks_from_excel(TASK_FILE)

    analyzed_tasks = []

    print("开始调用 AI 分析任务...")
    for task in tasks:
        ai_result = analyze_task_with_ai(task)
        task.update(ai_result)
        analyzed_tasks.append(task)

    print("开始生成日报...")
    report = generate_markdown_report(analyzed_tasks)

    filepath = save_report(report)
    print(f"日报已生成:{filepath}")

    print("开始发送通知...")
    send_wechat_markdown(report)

    print("工作流执行完成。")


if __name__ == "__main__":
    main()

运行主程序:

python main.py

如果执行成功,你将在 output 目录下看到生成的日报文件,例如:

output/daily_report_20250106.md

九、生成效果示例

生成的日报大致如下:

# AI自动生成工作日报(2025-01-06)

## 一、今日任务概览

- 任务总数:4
- 已完成:1
- 进行中:2
- 待处理:1

## 二、任务明细

### T001|官网改版

- 负责人:张三
- 当前状态:进行中
- 截止日期:2025-01-10
- 任务描述:完成首页视觉设计并确认交互方案
- AI摘要:张三正在推进官网首页视觉设计和交互方案确认。
- 风险判断:需关注设计确认是否影响后续开发排期。
- 行动建议:建议尽快组织评审会议,明确最终方案。

### T002|客户跟进

- 负责人:李四
- 当前状态:待处理
- 截止日期:2025-01-08
- 任务描述:跟进A客户报价反馈,确认预算和采购周期
- AI摘要:李四需要跟进A客户报价反馈并确认采购计划。
- 风险判断:客户反馈不及时可能影响销售预测。
- 行动建议:建议当天联系客户并记录下一步沟通时间。

十、如何把工作流做得更智能?

上面的示例只是一个基础版本。真正落地到企业办公时,可以继续做增强。


1. 增加任务优先级判断

可以在 Excel 中增加 优先级 字段,例如:

优先级

然后让 AI 根据截止时间、状态和优先级判断风险等级。

例如输出:

{
  "risk_level": "高",
  "reason": "任务截止日期临近且仍未启动"
}

这样日报就可以自动突出高风险事项。


2. 接入飞书多维表格

如果团队使用飞书,可以把 Excel 换成飞书多维表格。程序定时读取表格数据,再生成日报并发送到飞书群。

优势是:

  • 数据实时更新;
  • 团队成员协作方便;
  • 不需要反复传 Excel;
  • 可以和飞书机器人联动。

3. 自动生成周报和月报

日报通常关注任务状态,而周报更关注结果和复盘。

你可以让 AI 根据一周的任务记录生成:

  • 本周完成事项;
  • 本周风险问题;
  • 下周重点计划;
  • 需要管理层协调的事项;
  • 项目整体进度评价。

4. 增加人工确认环节

办公自动化并不意味着完全无人参与。对重要内容,建议加入“人工确认”步骤。

例如:

  1. AI 生成日报;
  2. 程序发送给负责人预览;
  3. 负责人确认后再发送到大群;
  4. 若未确认,则只保存草稿。

这种方式可以兼顾效率和准确性。


十一、定时运行工作流

如果希望每天上午 9 点自动生成日报,可以使用系统定时任务。

Linux / macOS 使用 crontab

执行:

crontab -e

添加:

0 9 * * 1-5 /usr/bin/python3 /path/to/ai-office-workflow/main.py

表示每周一到周五上午 9 点执行。


Windows 使用任务计划程序

步骤如下:

  1. 打开“任务计划程序”;
  2. 创建基本任务;
  3. 设置触发时间,例如每天 9:00;
  4. 操作选择“启动程序”;
  5. 程序填写 Python 路径;
  6. 参数填写 main.py
  7. 起始位置填写项目目录。

十二、常见问题

1. AI 输出不是 JSON 怎么办?

大模型有时会输出解释文字,导致 JSON 解析失败。解决方法包括:

  • 在 Prompt 中强调“只输出 JSON”;
  • 使用更低的 temperature
  • 使用 JSON Schema 或函数调用能力;
  • 增加正则提取和异常处理;
  • 解析失败时走人工复核。

2. 企业微信消息发送失败怎么办?

常见原因包括:

  • Webhook 地址错误;
  • 企业微信机器人被删除;
  • 群机器人权限受限;
  • 消息内容过长;
  • 网络无法访问企业微信接口。

可以先用简单内容测试:

import requests

webhook = "你的Webhook地址"

payload = {
    "msgtype": "text",
    "text": {
        "content": "测试消息"
    }
}

requests.post(webhook, json=payload)

3. 如何保护公司数据?

使用 AI 办公自动化时,数据安全非常重要。建议:

  • 不要上传敏感客户信息;
  • 对姓名、手机号、合同金额等字段脱敏;
  • 使用企业级 API 或本地私有化模型;
  • 对日志进行权限控制;
  • 密钥保存在环境变量中;
  • 重要文档输出前加入人工审核。

十三、完整运行流程总结

整个项目运行流程如下:

准备 tasks.xlsx
    ↓
配置 .env
    ↓
安装依赖
    ↓
执行 python main.py
    ↓
读取任务数据
    ↓
AI 分析任务
    ↓
生成 Markdown 日报
    ↓
保存到 output 目录
    ↓
发送企业微信通知

从实用角度看,这个工作流已经能满足很多团队的基础日报需求。如果你愿意继续扩展,它还可以演变成一个完整的办公自动化系统。


十四、进阶扩展源码思路

如果你想继续升级,可以增加一个风险等级字段:

def calculate_risk_level(task: dict) -> str:
    status = task.get("当前状态", "")
    priority = task.get("优先级", "中")

    if status == "待处理" and priority == "高":
        return "高"
    elif status == "进行中" and priority in ["高", "中"]:
        return "中"
    else:
        return "低"

也可以增加邮件发送模块:

import smtplib
from email.mime.text import MIMEText
from email.header import Header


def send_email_report(sender, password, receiver, subject, content):
    message = MIMEText(content, "plain", "utf-8")
    message["From"] = Header(sender, "utf-8")
    message["To"] = Header(receiver, "utf-8")
    message["Subject"] = Header(subject, "utf-8")

    smtp = smtplib.SMTP_SSL("smtp.qq.com", 465)
    smtp.login(sender, password)
    smtp.sendmail(sender, [receiver], message.as_string())
    smtp.quit()

这样你就可以将日报同时发送到邮箱。


十五、结语

AI 办公自动化的核心,不是为了炫技,而是为了把人从重复性工作中解放出来。真正有价值的不是“让 AI 替你工作”,而是让 AI 帮你处理低价值、重复性、结构化的信息流,让你有更多时间做判断、沟通、创意和决策。

本文提供的工作流虽然简单,但已经覆盖了办公自动化的关键环节:

  • 数据读取;
  • AI 分析;
  • 内容生成;
  • 文件保存;
  • 消息通知;
  • 定时执行。

你可以在此基础上继续扩展:接入飞书、钉钉、企业微信、Notion、CRM、数据库或邮件系统。只要把任务拆成清晰步骤,再用程序和 AI 串联起来,就能逐步打造出适合自己团队的 AI 办公自动化体系。

如果你是刚开始学习 AI 办公自动化,建议先从一个小场景入手,例如“自动生成日报”或“自动总结会议纪要”。当你熟悉流程后,再逐步增加更多节点。这样既容易落地,也能快速看到效率提升。

目录结构
全文