用途:当交付物是 Excel 工作簿本身(创建、编辑、分析、转换 .xlsx/.xlsm/.xltx)时使用。按任务选工具:带公式和格式的创建或编辑用 openpyxl;批量数据进出用 pandas(read_excel、to_excel);快速查看工作表用 markitdown file.xlsx;读取含公式和值的模型需分两次 load_workbook(data_only=True 取缓存值,默认取公式字符串,一次无法同时得到两者)。
主要能力与要求:每个输出须使用专业字体(如 Arial、Times New Roman);公式零错误,recalc.py 报告 errors_found 时不得交付;使用公式而非硬编码结果,如 sheet['B10'] = '=SUM(B2:B9)';严格遵守用户的表格名、列标题和指定公式;在单元格批注或表尾说明假设与硬编码数字来源。编辑现有文件须匹配其既有约定,保留其公式,在副本上操作。
使用方式:脚本路径相对于技能目录。重算命令:python scripts/recalc.py output.xlsx 30(可选超时秒数,默认 30)。该脚本在暂存副本上运行 LibreOffice calculateAll(),检查文件被重写、公式锚点保留、公式有缓存,成功后原子替换原路径。应读取 JSON 而非只看退出码:success 表示无类型化错误单元格;errors_found 表示重算完成且文件已替换但含错误,两者均退出 0;无 status 的 error 表示转换或验证失败,原文件未替换且退出 1;无效 CLI 参数退出 2。
限制:openpyxl 不求值公式,经其保存会移除公式缓存;data_only=True 加载后若保存会永久丢失公式。.xlsm 需 keep_vba=True,但不保留全部 Excel 特性。外部链接、VBA/UDF、动态数组溢出等 Excel 专有功能需在兼容的 Excel 工作流中验证。MarkItDown 需 markitdown[xlsx],且不保证支持 .xlsm。依赖方面需 openpyxl 和单独安装的 LibreOffice(soffice 在 PATH 上),另用 defusedxml、lxml;不假设包已预装,可用 uv run --with openpyxl==3.1.5 python your_script.py。资料提及捆绑工作流以 openpyxl 3.1.5 和 LibreOffice 26.2.4.2 验证过。