# Excel_EvaluateRewriter **Repository Path**: ginkdu/excel_-evaluate-rewriter ## Basic Information - **Project Name**: Excel_EvaluateRewriter - **Description**: 通过VBA解决替换EVALUATE函数,解决宏表函数被微软默认禁用,以及 WPS在自定义名使用EVALUATE函数保存为`xlsx格式`,导致格式与 Excel声明不匹配问题 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-13 - **Last Updated**: 2026-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: Excel ## README # Excel_EvaluateRewriter ![Python](https://img.shields.io/badge/Python-3.7+-blue.svg) ![License](https://img.shields.io/badge/License-MIT-green.svg) ![Platform](https://img.shields.io/badge/Platform-Windows-lightgrey.svg) 一个强大的Excel公式修复和重写工具,专门用于处理包含EVALUATE函数的Excel文件,自动添加自定义Eval函数并修复相关问题。 ## 📋 功能特性 - ✅ **自动修复EVALUATE引用**:将Excel中的EVALUATE函数替换为安全的Eval函数 - ✅ **智能地址转换**:将整列引用(如$D:$D)转换为具体单元格引用(如$D1) - ✅ **VBA代码注入**:自动添加自定义Eval函数到Excel文件中 - ✅ **多格式支持**:支持.xls、.xlsx、.xlsm、.xlsb等多种Excel格式 - ✅ **批量处理**:支持单个文件或整个文件夹的批量处理 - ✅ **自动修复损坏文件**:使用Excel内置修复功能处理损坏的文件 - ✅ **清除计算链(calcChain)**:处理后自动删除`xl/calcChain.xml`及其引用,消除打开时"从 /xl/calcChain.xml 部分删除了 公式(计算属性)"的修复提示(Excel打开时会自动重建计算链) - ✅ **命名空间前缀兼容**:支持带命名空间前缀的XML标签(如``、``),确保各种Excel写出格式下的公式都能被正确替换 - ✅ **兼容WPS文件**:正确处理WPS Office编辑过的文件(如cellimages单元格图片等扩展特性) - ✅ **彩蛋功能**:集成SpreadsheetCleaner.exe进行额外清理(如果存在) ## 🚀 快速开始 ### 系统要求 - Windows操作系统 - Python 3.7或更高版本 - Microsoft Excel(用于COM自动化) - 依赖库:openpyxl, pywin32 ### 安装依赖 ```bash pip install openpyxl pywin32 ``` ### 使用方法 #### 命令行方式 ```bash # 处理单个文件 python Excel_EvaluateRewriter.py your_file.xlsx # 处理多个文件 python Excel_EvaluateRewriter.py file1.xlsx file2.xlsx file3.xlsm # 处理整个文件夹 python Excel_EvaluateRewriter.py C:\MyExcels\ ``` #### 编译为可执行文件 项目提供了Nuitka编译脚本,可以将Python脚本编译为独立的exe文件: ```cmd compile2.cmd ``` 编译后的可执行文件位于`build`目录中。 ## 🔧 工作原理 ### 核心处理流程 1. **文件检测**:识别Excel文件类型和内容 2. **EVALUATE修复**: - 修改`xl/workbook.xml`中的名称管理器公式 - 修改`xl/externalLinks/`中的外部链接公式 - 修改工作表单元格中的公式 - 兼容带命名空间前缀的标签(``、``) 3. **地址转换**:将整列引用转换为具体单元格引用 4. **清除计算链**:删除`xl/calcChain.xml`部件,并同步移除`[Content_Types].xml`中的Override声明和`xl/_rels/workbook.xml.rels`中的关系引用,避免公式改写后计算链悬空引发Excel修复提示 5. **VBA注入**:添加自定义Eval函数模块 6. **文件保存**:生成带日期标记的新.xlsm文件 ### 特殊文件处理 对于包含宏但格式不正确的文件,程序会自动: 1. 修改`[Content_Types].xml`为宏启用类型 2. 重命名为.xlsm格式 3. 使用Excel修复模式打开并重新保存 4. 正常处理修复后的文件 ## 📁 项目结构 ``` Excel_EvaluateRewriter/ ├── Excel_EvaluateRewriter.py # 主程序文件 ├── compile2.cmd # Nuitka编译脚本(自动创建虚拟环境) ├── replace.ico # 程序图标 ├── .gitignore # 忽略虚拟环境与编译产物 └── build/ # 编译输出目录(不纳入版本控制) ``` ## 🛠️ 技术细节 ### 主要依赖库 - **openpyxl**:读取和操作Excel文件 - **pywin32**:Windows COM自动化,与Excel交互 - **zipfile**:处理Excel文件的ZIP结构 - **re**:正则表达式处理公式文本 ### 关键函数 - `fix_evaluate_in_xlsx()`:修复xlsx文件中的EVALUATE引用 - `add_vba_code_to_excel()`:向Excel文件添加VBA代码 - `replace_evaluate_with_eval()`:替换EVALUATE为Eval - `process_excel_files()`:批量处理Excel文件 - `collect_excel_files()`:收集指定路径下的所有Excel文件 ### VBA Eval函数 程序会自动添加以下VBA函数到Excel文件中: ```vba Function Eval(formula As String) As Double ' 移除括号内容并计算公式 ' 支持【】和[]两种括号格式 ' 返回计算结果或错误值 End Function ``` ## ⚠️ 注意事项 1. **备份重要文件**:使用前请备份原始Excel文件 2. **Excel版本兼容性**:需要安装Microsoft Excel 3. **宏安全性设置**:确保Excel允许运行宏 4. **文件权限**:确保对目标文件有读写权限 5. **路径长度**:避免过长的文件路径(建议<200字符) ## 🐛 故障排除 ### 常见问题 1. **"文件未启用宏"错误** - 程序会自动处理此类文件 - 确保Excel宏安全性设置正确 2. **COM自动化错误** - 检查是否安装了pywin32 - 确认Excel已正确安装 - 尝试以管理员身份运行 3. **编码问题** - 确保文件使用UTF-8编码 - Windows CMD中使用`chcp 65001`切换编码 4. **打开修复后的文件提示 /xl/calcChain.xml 修复信息** - 新版本已自动清除calcChain,请确认使用的是最新编译版本 - 首次打开时Excel会自动全量重算并重建计算链,属正常现象 ### 日志查看 程序运行时会在控制台显示详细的处理日志,包括: - 文件处理状态 - 修复操作详情 - 错误信息和警告 ## 📄 许可证 本项目采用MIT许可证 ## 👨‍💻 作者 **公众号:旺丁旺财杂货铺** - 提供神奇的Excel解决方案 - 专注于办公自动化工具开发 ## 🤝 贡献 欢迎提交Issue和Pull Request来改进这个项目! ## 📞 支持 如有问题或建议,请关注微信公众号:**旺丁旺财杂货铺** --- *最后更新时间:2026年8月*