# SpreadsheetCleaner **Repository Path**: ginkdu/spreadsheet-cleaner ## Basic Information - **Project Name**: SpreadsheetCleaner - **Description**: 一个基于.NET的 Excel文件(*.xlsx/*.xlsm/*.xls)文件减肥器,删除冗余样式,失效名称和未使用单元格空间,能让WPS 使用嵌入图片无人操作批量转换成浮动照片,顺便解决电子表格兼容性问题。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-13 - **Last Updated**: 2026-08-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: ExcelCleaner, Excel ## README # 🚀 SpreadsheetCleaner ### 介绍 一个基于https://github.com/davecra/ExcelFileCleaner 项目的改进控制台软件: - 原项目仅保留 删除冗余样式,失效名称和未使用单元格空间,其它可选项目去除(个人认为人工排除更合理); - 使用.Net 10重构,放弃GUI转为控制台,性能UP!UP!UP!; - 支持原项目不支持的多文件或者文件夹输入,使用更方便; - 增加*.xls支持:使用 aardio 构建xls2xlsm,输入*.xls文件后自动转换为*.xlsm文件后再进行垃圾清理; - 增加多线程处理,删除冗余样式,失效名称和未使用单元格空间分别使用不同线程(<范无咎>、<谢必安>和<钟馗>),时间极大节省; - 增加 WPS 嵌入图片修复(<谛听>):WPS 表格中插入的嵌入图片使用私有 `xlfn.DISPIMG()` 公式实现,在 Excel 中显示为公式错误。本工具自动将其转换为 Excel 原生浮动图片,并清理 WPS 私有部件残留; - 默认原文件自动备份为*.bak。 处理后文件大小比WPS文件减肥功能的要小; ### WPS 嵌入图片转换说明(谛听) WPS 的"嵌入单元格"图片存储在私有部件 `xl/cellimages.xml` 中,单元格内以 `_xlfn.DISPIMG("ID_xxx",1)` 公式引用,Excel 无法识别。处理流程: 1. 扫描各工作表中的 `DISPIMG` 公式,解析图片 ID; 2. 从 `cellimages.xml` 读取 ID → 图片部件的映射,提取图片数据; 3. 在图片所在单元格生成 `twoCellAnchor`(editAs="oneCell")浮动锚点:保持图片原始纵横比,等比缩放适配单元格(不放大)并居中; 4. 清除单元格公式与缓存值(保留单元格样式); 5. 彻底移除 `cellimages.xml`、其关系文件及 `[Content_Types].xml`、`workbook.xml.rels` 中的全部引用; 6. 相同图片被多个单元格引用时自动去重复用同一媒体部件。 非 WPS 图片文件(无 `cellimages.xml`)会自动跳过,零开销。 ### 软件架构 Vscode编写,使用DocumentFormat.OpenXml、PublishFolderCleaner及SharpZipLib; ### 使用提示 建议将**SpreadsheetCleaner.exe**创建快捷方式移动到**\%Appdata%\Microsoft\Windows\SendTo\\** ,之后就可以**右键** → **发送到** → **SpreadsheetCleaner** 进行调用。 (**什么打开GUI,拖文件到exe,写命令行的太累了,怎么快怎么来**⚡) 注意: 因主要代码继承自**github.com/davecra/ExcelFileCleaner**,故清理工作簿样式的代码仍受微软公司授予的专利(USP#8,281,236)保护。 此源代码仅可免费用于非商业用途,不得将此项目中提供的源代码用于任何计划销售或授权的商业软件产品中。