ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

xlsx Skill 技术指南:基于 openpyxl、pandas 与 LibreOffice 的 Excel 创建、编辑与公式校验实战

xlsx Skill 技术指南:基于 openpyxl、pandas 与 LibreOffice 的 Excel 创建、编辑与公式校验实战 人工智能AI 技能AI 评测【免费下载链接】skillsPublic repository for Agent Skills项目地址https://gitcode.com/GitHub_Trending/skills3/skills点击查看免费下载导读本文以开源仓库 GitHub_Trending/skills3/skills 中的 xlsx Skill 文档 为核心系统讲解面向 .xlsx/.xlsm/.xltx/.csv/.tsv 文件的程序化创建、读取、编辑与分析全流程。你将掌握如何在不同任务下选择正确的工具链openpyxl / pandas / markitdown、如何用 recalc.py 强制重算并排查公式错误、哪些 Excel 公式能在自动化工作流中安全存活、以及财务模型工作簿的配色与数字格式规范——全部附带仓库源码级依据可直接在真实工作流中复制执行。Skill 定位什么任务该用它什么任务不该用xlsx 是仓库skills/xlsx/目录下的一个 Agent Skill其触发条件写在其描述元数据见 SKILL.md 的 frontmatter中主输入或主输出是电子表格打开、读取、编辑、修复已有.xlsx、.xlsm、.xltx、.csv、.tsv文件如加列、计算公式、格式化、制图、清洗脏数据从零创建电子表格从其他数据源生成新表格表格格式互转在.xlsx/.csv/.tsv之间转换清洗杂乱表格数据畸形行、错位表头、垃圾数据整理成规范表格触发信号用户以文件名或路径引用表格文件哪怕随口说下载文件夹里那个 xlsx并要求对其做点什么。同时明确不触发的场景主交付物是 Word 文档、HTML 报告、独立 Python 脚本、数据库管线或 Google Sheets API 集成——即使其中涉及表格数据。理解触发边界有助于把该 Skill 用在刀刃上避免把表格工具误用于非表格交付物。任务-工具选型矩阵原文档用一张表给出了四类任务的工具取向这是整份指南的骨架任务推荐方案创建 / 编辑含公式、格式openpyxl——注意下文openpyxl 陷阱一节批量数据进出pandasread_excel/to_excel快速浏览工作表markitdown file.xlsx——每个 sheet 以## SheetName分节也支持.xlsm。不提供单元格坐标因此不能基于它规划编辑读取模型公式和值都要两次load_workbook——详见openpyxl 陷阱环境前提openpyxl、pandas、markitdown均已预装不要先执行pip install直接写脚本 import 即可。只有当 import 失败或markitdown命令缺失时才pip install对应包。依赖清单见 SKILL.md 的 Dependencies 一节openpyxl、pandas、markitdownpip预装以及 LibreOfficesoffice通过 scripts/office/soffice.py 自动适配沙箱环境。环境适配soffice.py 如何让 LibreOffice 在沙箱中跑起来重算依赖 LibreOffice而沙箱化 VM 中AF_UNIXsocket 常被禁止。仓库中的 soffice.py 在运行时探测该限制并做两层兜底运行时探测_needs_shim()尝试创建AF_UNIXsocket失败即认为需要 shimLD_PRELOAD shim_ensure_shim()动态编译一个 C shimlo_socket_shim.so把被禁止的socket(AF_UNIX)调用回退到socketpair()并用管道模拟listen/accept的阻塞语义使 LibreOffice 的无头转换流程得以完成环境变量get_soffice_env()固定设置SAL_USE_VCLPLUGINsvp虚拟显示插件并注入LD_PRELOAD用户配置隔离run_soffice()在参数缺少-env:UserInstallation时自动为每次调用创建临时 profile避免非 root 沙箱无法引导默认配置而报User installation could not be completed。这意味着在任何环境运行recalc.py前无需手动配置 LibreOffice脚本会自行完成沙箱适配——前提是系统里确实安装了soffice缺失时脚本返回soffice not found on PATH错误。每份输出的硬性要求原文档列出了无论创建还是编辑都必须满足的产出规范逐条执行可保证交付物专业且可被再次编辑全篇专业字体除非用户另有要求统一使用 Arial、Times New Roman零公式错误recalc.py报告errors_found时绝不能交付。若怀疑错误是先于你存在的用data_onlyTrue加载原始文件并查看该单元格来证明——你自己引入的错误和继承的错误看起来一模一样用公式不要硬编码结果写sheet[B10] SUM(B2:B9)而不是 Python 算好的总数。工作表必须在输入变化时能自动重算严格遵循用户规格精确的表名、精确的列头、用户指定的公式一字不差。一个计算了别的东西的精美重设计即使再优雅也是失败文档化每个假设与硬编码数字写在读者看得见的地方——单元格批注或表格末尾的相邻单元格。有真实来源就引用如Source: Company 10-K, FY2024, Page 45, Revenue Note数字来自用户就直说为他人填写的空白工作簿需要一段简短图例说明该编辑哪些单元格并附一行符合预期格式的真实示例数据行但绝不可给被要求编辑的文件添加这样的行编辑已有文件完全匹配其既有约定——它们优先于本文所有指南。先找到其指定输入单元格通常用不同的字体颜色、填充或底纹标记只写那里并让所有既有公式原封不动。强制重算机制recalc.py 深度解析为什么必须重算openpyxl 把公式写成字符串不附带任何缓存值。在重算之前任何读取缓存值的消费者——pandas、load_workbook(data_onlyTrue)、大多数预览器——读到的公式单元格都是None。因此只要文件含公式重算是强制步骤。用法与退出码python scripts/recalc.py output.xlsx [timeout_seconds] # 默认 30 秒LibreOffice 计算全部公式后文件原地重写脚本输出 JSONstatussuccess或errors_foundtotal_formulas文件中的公式总数total_errors错误单元格总数error_summary按错误类型分组每种类型列出最多 100 个单元格位置locations_truncated表示被截断的数量——判断总量要以total_errors为准而不是看列表长度。修复它点名的单元格后再次运行。关键退出码语义源码见 recalc.py 的 main()JSON 含error键而非status说明什么都没重算此时脚本以非零码退出errors_found反而以0退出——所以绝不能把命令退出码为 0当成工作簿干净。只有error分支sys.exit(1)errors_found分支同样走 0 退出。扫描的错误类型recalc.py 的_recalc_with_profile()用load_workbook(data_onlyTrue)读回重算结果逐单元格匹配以下 7 种 Excel 错误字符串#VALUE! #DIV/0! #REF! #NAME? #NULL! #NUM! #N/A命中即记录sheet!coordinate位置并入error_summary随后再以data_onlyFalse打开统计total_formulas以开头的字符串单元格计数。绿色重算 ≠ 正确的重算重算通过只能证明公式能求值不能证明公式算对了。范围差一行、引用了错误的行都会产出一份无错但数字错误的工作簿。原文档给出的对策先写好 23 个公式验证它们拉到了你预期的数值再铺开整个网格。外部链接保护recalc.py 的拒绝逻辑工作簿若链接到另一个文件用 openpyxl 重新保存会丢失这些链接。这类公式形如[1]Returns Analysis!$B$2——其中的[1]是工作簿外部引用列表的索引指向磁盘上的另一个文件不是本工作簿的 sheet。那个文件很少存在所以该单元格的缓存值是唯一的数据来源openpyxl 保存时剥离缓存值LibreOffice 随后真实解析引用、失败、写入#NAME?并永久删除所有外部链接。为此 recalc() 内置了保护通过external_links_at_risk()recalc.py 源码检查xl/externalLinks/部件、命名区域与公式中的外部引用若发现reaches_out且缓存值为None的单元格拒绝重算并返回error与external_link_cells列表——提示你先从原始文件复制这些单元格的值再保存或传--force接受链接丢失的风险。--force由命令行参数解析recalc.py main()透传。提示中还指出图表与条件格式也可能持有外部引用因此该列表可能不完整。超时与沙箱细节timeout_seconds默认 30 秒脚本实际执行时取max(5, 剩余时间)源码Linux 上用系统timeout包装 sofficemacOS 上有gtimeout才用源码。超时或 soffice 返回非零、或文件未被重写_stamp前后一致都会返回带error的 JSON。每次重算使用独立的临时 profile 目录安装一个 StarBasic 宏RecalculateAndSave见 recalc.py 的宏定义宏执行calculateAll()→store()→close(True)实现无头重算。公式选型哪些公式能活着通过校验LibreOffice 实现的函数比 Excel 少任何它无法求值的函数都会变成写进交付文件的字面量#NAME?。选型规则优先 Excel-2007 时代的函数SUMIFS、INDEX、MATCH、IFERROR、SUMPRODUCT——无需任何前缀六个 2007 之后的函数可用但必须带_xlfn.前缀openpyxl 把你的公式原样写进 XML而 Excel 存储 2007 后函数名时带前缀UI 隐藏了它_xlfn.TEXTJOIN _xlfn.CONCAT _xlfn.IFS _xlfn.SWITCH _xlfn.MAXIFS _xlfn.MINIFS裸写任何一个都会得到#NAME?绝不要用XLOOKUP、XMATCH、SORT、FILTER、UNIQUE、SEQUENCE当前运行时的 LibreOffice 在任何前缀下都无法求值它们。更新的构建可以但它们属于溢出spilling数组函数而 openpyxl 写出的文件没有溢出元数据结果只有区域左上角单元格拿到值——recalc.py会在截断结果上报total_errors: 0。查找请用INDEX/MATCH排序、过滤、去重请在 Python 中完成后再写入单元格一个小提示LibreOffice 无法解析的公式会被改写成小写回写——这是#NAME?旁边最快速的排查信号。openpyxl 陷阱全解原文档给出六条高频坑每一条都值得写进 checklist读取模型需要两次加载data_onlyTrue得到缓存值但公式没了默认模式得到公式字符串但没有值。一次加载不可能同时拿到两者data_onlyTrue是破坏性的——如果保存那个工作簿已经没有公式保存会用字面量永久替换每一个公式对 openpyxl 刚写出的文件用data_onlyTrue读取处处是None——先跑recalc.py。结果为的公式也读作None合并单元格只写左上角锚点。区域内其他单元格都是只读的MergedCell.xlsm会丢失宏除非向load_workbook传keep_vbaTrue含空格的 sheet 名在跨 sheet 引用中必须加引号Assumptions Inputs!$B$5。不加引号会求值为#VALUE!。财务模型工作簿规范除非用户另有指示或已有文件就是这么做的否则按以下约定执行配色蓝色文本(0,0,255)——硬编码输入与情景杠杆scenario levers黑色——公式绿色(0,128,0)——跨 sheet 链接红色(255,0,0)——跨文件链接黄色填充(255,255,0)——关键假设及用户需要填写的单元格。数字格式货币$#,##0表头标注单位Revenue ($mm)零显示为-含百分比$#,##0;($#,##0);-负数用括号百分比0.0%存储为小数0.15渲染为15.0%存15会渲染成1500.0%估值倍数0.0x年份用文本2024绝不能是2,024。结构每个假设独占一个带标签的单元格被使用它的公式引用B5*(1$B$6)绝不写B5*1.05公式在所有预测期间保持一致——行中间孤立的被编辑单元格是最常见的静默错误来源为可能为零的分母设置守卫。xlsx 家族的校验辅助仓库在 scripts/office/validate.py 中提供了 Office 文档 XML 校验工具支持.docx/.pptx/.xlsx及模板但其中对 xlsx 家族有一个明确设计不做 XSD schema 校验——validate.py的case xlsx分支直接打印说明并建议公式错误检查请改用 scripts/recalc.py源码见 validate.py。也就是说xlsx 工作流的质量闸门就是本文的强制重算机制而不是 XML 模式校验。相关支撑还体现在 helpers/init.py 的OOXML_FAMILY映射.xlsx/.xltx归入 xlsx 家族与安全解压逻辑中。依赖清单与许可运行依赖openpyxl、pandas、markitdownpip 预装仅当 import 失败或命令缺失时才安装、LibreOfficesoffice沙箱环境由 soffice.py 自动适配。许可本 Skill 为专有许可完整条款见 skills/xlsx/LICENSE.txt。结语从任务选型、产出规范、强制重算、公式存活策略到 openpyxl 陷阱与财务模型约定xlsx Skill 把用代码生成可信 Excel这件事收敛成了一套可复现的工程流程。核心闭环是openpyxl 写公式 → recalc.py 用 LibreOffice 重算并扫描 7 类错误 → 依据 error_summary 修复 → 确认 status 为 success——同时牢记绿色重算只证明求值成功数字正确性仍要靠先写 23 个公式抽查来保证。赞分享人工智能AI 技能AI 评测【免费下载链接】skillsPublic repository for Agent Skills项目地址https://gitcode.com/GitHub_Trending/skills3/skills点击查看免费下载相关推荐DeepTutor xlsx 技能深度解析基于 openpyxl 与 pandas 的 Excel 工作簿读写、公式与交付实践DeepTutor xlsx 技能深度解析基于 openpyxl 与 pandas 的 Excel 工作簿读写、公式与交付实践 在 DeepTutor 中当人工智能AI 应用AI Agent多智能体RAG教育后端前端DeepChat xlsx 技能指南用 pandas 与 openpyxl 打造零公式错误的 Excel 工作簿DeepChat xlsx 技能指南用 pandas 与 openpyxl 打造零公式错误的 Excel 工作簿 导读 resources/skills/xlAI Agent人工智能AI 应用桌面应用MCP ClientsEkko Studio xlsx Skill 技术指南Excel 工作簿的创建、检查、编辑与结构重组Ekko Studio xlsx Skill 技术指南Excel 工作簿的创建、检查、编辑与结构重组 Ekko Studio仓库路径 packages/ekAI 应用人工智能AI Agent本地部署前端后端工作流自动化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进