首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >今天我用 AI 在搭个工作日任务提醒工具

今天我用 AI 在搭个工作日任务提醒工具

作者头像
用户12610713
发布2026-07-10 14:47:33
发布2026-07-10 14:47:33
10
举报

从一行需求到能跑起来的桌面应用:我用 AI 一天搭了个工作日任务提醒工具-还没完全跑通

一个打工人学 AI 的第 N 天。今天记录一个真实项目:从"我想要个东西"到"双击就能用",中间踩了 5 个坑,砍掉了 1 个过度设计的功能,最终交付了一个 Windows 常驻的自动化小工具。


一、需求起点:痛点真实

我每周要做两件事:

  1. 打开 2 个 Excel(一个 SOP 清单、一个问题项追踪表),看看哪些没完成
  2. 截图(或导出表格图),发到部门内部 OA 群"线束工艺小组"

听起来不复杂,但工作日每天 9:00 和 17:30 各一次,手动重复很烦。而且表格在企业内网网盘上,企业装了文档加密软件,不是真 Excel 进程根本读不到明文

所以我决定:让 AI 帮我搭一个 Windows 桌面应用,启动后自动读 Excel → 生成表格图 → RPA 模拟人操作 OA 客户端 → 发到指定群


二、方案设计:4 轮澄清才动手

我一开始只丢了一句"做一个工作日定时任务自动提醒的桌面应用"。AI 很有耐心地问了 4 轮才动手:

轮次

澄清点

我的选择

1

文件格式 / 截图范围

Excel (.xlsx) / 状态列文字标记

2

发送方式 / 运行方式

生成表格图片 / Windows 常驻

3

OA 客户端

泛微 EMobile10(CEF 架构,内部不可见)

4

登录 / 群名

账号密码 / 固定"线束工艺小组"

最关键的第 3 轮——EMobile10 内部是 Chromium 渲染的,控件树看不到任何内部元素,意味着只能走"窗口激活 + 图像识别 + 键盘模拟"的 RPA 路线。这条路一旦走通,所有 UI 操作都依赖"看图说话"。


三、动手:10 个模块,2000 行代码

技术栈定下来:

  • Python 3.13.12 + openpyxl(Excel 解析,带隐藏行检测)+ Pillow(表格图渲染)
  • pyautogui + pywinauto(RPA)
  • APScheduler(定时)+ chinese_calendar(工作日判断)
  • pystray(系统托盘)+ tkinter(配置 GUI)
  • win32clipboard CF_DIB(把图片塞进剪贴板)

10 个模块分别负责:日志、Excel 读取、任务筛选、图片生成、OA 发送、调度、工作日判断、托盘、配置弹窗、主入口。

写代码的过程不展开了——直接说今天撞的 5 个真实坑。


四、5 个坑,每个都教你点东西

坑 1:openpyxl 报 "File is not a zip file"

症状:所有任务跑起来都失败,错误是 "File is not a zip file"。

原因:内网网盘上的 Excel 都经过企业文档落地加密(文件头是 00 00 5b 00,不是正常的 PK\x03\x04)。Excel 能打开是因为企业加密软件给 office.exe 注册了"受信进程",实时解密 I/O;openpyxl 是普通 Python 进程,拿不到明文

试过的死胡同

  • 改 read_only / data_only → 没用,都是 zip 解析层
  • xlrd (.xls OLE 格式) → 没用,密文 OLE 也打不开
  • win32com.client (Excel COM) → "无效的类字符串",这台机没装 Excel
  • shutil.copy 复制出来 → 复制后仍是密文,加密是文件级

教训:内网项目涉及网盘文件解析,先用 head -c 16 file 看魔数再写代码

坑 2:pyautogui 装不上

清华源装 12 个包,其他都过,就 pyautogui 卡住。错误是沙箱清理临时目录失败。

修法:加 --no-cache-dir 绕过。

教训:pip 默认会把 wheel 缓存到 %TEMP%\pip-*,沙箱环境下临时目录可能被主动清理。

坑 3:start.bat 中文乱码

bat 里写了 echo 启动中...,cmd.exe 用 GBK 解析 UTF-8 文件,中文字符全乱码导致后续命令解析失败

修法:bat 文件全部改 ASCII,用 GBK (cp936) 编码保存。中文输出用 chcp 65001 也不可靠。

教训:Windows 批处理永远用 ASCII,中文一律不写。

坑 4:NameError: name 'Optional' is not defined

__init__ 里加了 config_path: Optional[str] = None忘记 from typing import Optional。py_compile 不查 NameError,必须实际 import 才会暴露。

教训:改完代码后必须跑"实际 import 测试",不能只看 py_compile 通过。

坑 5:DSE 菜单定位不了

我设计了"模拟键鼠右键 → DSE迅软数据安全专家 → 申请解密 → 理由'111111' → 确定"的完整流程。代码写完了,结果发现:

右建菜单的子项位置因 DSE 客户端版本而异,没有 OCR 几乎无法稳定定位。


五、砍掉一个过度设计:放弃自动解密

坑 5 我挣扎了一会儿。技术上能搞定(图像识别菜单项),但成本太高:

  • 菜单位置一旦变就要重新截模板
  • 不同公司 DSE 客户端版本不同
  • 每次升级都要重新调试
  • 一个本来 5 秒钟的手工操作,硬要自动化,反而要花 2 小时维护

我做了一个艰难但正确的决定:删除解密模块

最终流程变成:

  • 早上到公司 → 手工右键 2 个文件 → DSE 申请解密 → 等几秒
  • 打开 EMobile10 → 切到"工作消息"页
  • 双击 start.bat → 程序自动跑完 3 个任务、发 3 张图

教训:自动化要尊重用户工作流。该手工的就手工,不要为了"全自动化"强行覆盖一切。


六、最终交付

代码语言:javascript
复制
D:\WorkBuddy Document\任务提醒\task-reminder\
├── main.py
 
# 主入口
├── modules/
 
# 10 个业务模块
├── ui/
 
# 托盘 + 配置弹窗
├── config.json
 
# 3 个任务 + 定时 + OA 配置
├── start.bat
 
# 启动脚本 (GBK 编码)
├── check.py
 
# 永久静态检查脚本
├── requirements.txt
└── README.md

功能

  • 启动即执行(无定时,常驻托盘)
  • 自动拉起 EMobile10(已开则复用)
  • 读 2 个 Excel → 生成 3 张表图 → 发到"线束工艺小组"
  • 同文件去重、失败重试、详细日志

七、今天学到什么

  1. 企业内网有 100 种加密软件,先看魔数再写代码
  2. Windows bat 文件只写 ASCII,编码用 GBK
  3. py_compile 不查 NameError,必须真 import
  4. 自动化要尊重手工流程,不为了"全自动"而做无谓的复杂度
  5. 第 4 轮澄清比第 1 轮需求更重要——OA 是 CEF 架构这一条,直接决定技术选型

明天打算加一个"工作消息 tab 模板图",把切 tab 也自动化掉。


关于这个系列:记录一个普通打工人学 AI、做项目的全过程。没有大词,没有融资,没有 demo video,只有真实的问题、真实的代码、真实的坑。

如果你也在学 AI 做项目,欢迎留言交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从一行需求到能跑起来的桌面应用:我用 AI 一天搭了个工作日任务提醒工具-还没完全跑通
    • 一、需求起点:痛点真实
    • 二、方案设计:4 轮澄清才动手
    • 三、动手:10 个模块,2000 行代码
    • 四、5 个坑,每个都教你点东西
    • 坑 1:openpyxl 报 "File is not a zip file"
      • 坑 2:pyautogui 装不上
      • 坑 3:start.bat 中文乱码
      • 坑 4:NameError: name 'Optional' is not defined
      • 坑 5:DSE 菜单定位不了
    • 五、砍掉一个过度设计:放弃自动解密
    • 六、最终交付
    • 七、今天学到什么
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档