当前位置:首页>python>"非标准"办公环境下Python驱动 WPS JSA:一个办公达人的 AI 协同实战手记

"非标准"办公环境下Python驱动 WPS JSA:一个办公达人的 AI 协同实战手记

  • 2026-09-11 21:24:16
"非标准"办公环境下Python驱动 WPS JSA:一个办公达人的 AI 协同实战手记

"非标准"办公环境下Python驱动 WPS JSA:一个办公达人的 AI 协同实战手记

Build systems, not scripts. Leverage AI, don't just ask it.


痛点:当技术栈"落后"于时代

银河麒麟 V10。aarch64。Python 3.5。OpenSSL 1.0.2g。WPS Office,支持 JSA 宏,不支持 VBA。

这不是技术债。这是现实。

我有一个工作簿 表2026.xlsx,40+ 个工作表,需要合并、清洗、汇总。想用 Python 自动化到 目标.xlsm 里,目标.xlsm包括 JSA 宏——WPS 表格中可以直接调用自定义 JSA 函数,这点确实很赞!

运行脚本。数据对了。宏没了。

openpyxl 只能保留 VBA,不能保留 JSA。文档没说。Stack Overflow 没提。卡住了。


破局:用第一性原理拆解"黑盒"

When the tool doesn't fit the problem, change the abstraction.

认知升级 #1:xlsm 不是"Excel 文件",是 ZIP 压缩包

$ unzip -l 目标.xlsm | grep JDE    12345  2026-02-25 12:00   xl/JDEData.bin

WPS 的 JSA 宏,本质是 xl/JDEData.bin + 两个 XML 配置:

  • • [Content_Types].xml:注册宏文件类型
  • • xl/_rels/workbook.xml.rels:建立工作簿与宏的关联关系

openpyxl 保存时会重组 ZIP 结构,丢弃它不认识的条目。不是 bug,是设计。

认知升级 #2:不要"修复"openpyxl,要"绕过"它

错误思路:

"怎么让 openpyxl 支持 JSA?"

正确思路:

"怎么在 openpyxl 保存后,把宏配置重新塞回去?"

认知升级 #3:AI 不是答案生成器,是思维协处理器

我没问:"怎么保留 JSA 宏?"(太宽泛)

我做了:

  1. 1. 上传脚本 → 定位问题
  2. 2. 运行诊断代码 → 确认 JDEData.bin 是关键
  3. 3. 准备模板文件 → 建立宏的"只读源"
  4. 4. 迭代注入逻辑 → 从单文件到三文件,从追加到重建 ZIP

每一步,验证、反馈、迭代。AI 提供选项,我决策方向。


实战:四步构建"宏保留"流水线

Step 1:诊断结构(5 分钟)

将确认保有JSA宏代码的 目标.xlsm 另存为 template.xlsm。

# check_structure.pyimport zipfilewith zipfile.ZipFile("template.xlsm", 'r') as z:    for name in z.namelist():        if 'JDE' in name or 'jsMacro' in name:            print(name)

输出:xl/JDEData.bin → 锁定目标。

Step 2:准备"只读模板"(2 分钟)

  • • 永不手动修改它,只作为宏配置的源头
  • • 这是我的"黄金镜像"

Step 3:注入逻辑(核心代码)

def rebuild_zip_with_macros(source, template, output, macro_files):    # 1. 读取模板的宏配置到内存    # 2. 读取 source 的所有内容    # 3. 用模板配置覆盖 source 中的对应项    # 4. 统一写入新文件(避免 ZIP 重复条目)

关键细节:

  • • 用 zipfile 重建,而非 openpyxl 追加
  • • 先写宏配置文件,确保 WPS 优先读取
  • • 使用 ZIP_DEFLATED  压缩:与原始 xlsm 文件格式保持一致

Step 4:验证闭环(1 分钟)

$ python process.py🎉 完成!JSA 宏配置已恢复# 用 WPS 打开 → 宏编辑器显示 JS 代码 → 功能正常

方法论:给职场同学的 AI 协同框架

🎯 定义问题时,用"可验证"的语言

❌ "宏丢了怎么办?"

✅ "如何用 Python 在保存 xlsm 时保留 xl/JDEData.bin 及其 XML 关联?"

🔍 拆解复杂问题时,尝试"第一性原理"

  • • xlsm = ZIP + XML + binary
  • • 宏 = 特定文件 + 特定配置 + 特定关联
  • • 丢失 = 工具重组时丢弃未知条目

🔄 迭代方案时,用"最小可验证单元"

  1. 1. 先确认 JDEData.bin 是否存在
  2. 2. 再测试单文件注入
  3. 3. 最后处理三文件协同 + ZIP 重建

每一步都有输出、可回滚、可调试。

🛠️ 执行方案时,用"防御性编程"

# 检查文件存在# 捕获 ZIP 操作异常# 打印每一步状态(✓/❌)# 保留 template.xlsm 只读

办公杠杆:从今天开始

The best time to automate was yesterday. The second best time is after you've manually done it once.

如果你也有"非标准"办公环境:

  1. 1. 接受限制:银河麒麟、WPS Office、旧版 OpenSSL... 这些不是障碍,只是你的"约束条件"
  2. 2. 拆解黑盒:对于"文件格式",可以先问"它本质是什么?ZIP?JSON?二进制?"
  3. 3. 准备黄金模板:含宏/含格式/含配置的"只读源文件",是自动化的基石
  4. 4. 与 AI 协同:不是"帮我写代码",而是"帮我验证假设、提供选项、加速迭代"

可行动的小目标:

  • •选一个重复的 WPS 操作(如月度汇总)
  • •用 zipfile 查看其 xlsm 内部结构
  • •找出"必须保留"的关键文件(宏?图表?自定义 XML?)
  • •写一个"复制模板 + 注入数据 + 恢复配置"的最小脚本
  • •跑通一次,截图保存 → 这是你的"办公杠杆 1.0"

最后的话

技术会过时。工具会迭代。但系统思维 + 第一性原理 + 人机协同的能力,是复利资产。

你今天的"银河麒麟 + WPS + Python 3.5",可能是别人明天的"新环境 + 新约束 + 新需求"。

Build the system. Ship the solution. Iterate with AI.

办公自动化,不该等待"完美工具"。它该始于:一个 ZIP 文件,一行 Python,一次与 AI 的精准对话。

现在,去构建你的杠杆吧!

最新文章

随机文章