如何避免IronXL保存Excel 97-2003(.xls)文件时出现损坏报错?
我有一个基于.NET Framework 4.8的C#应用,正在使用IronXL.Excel 2025.2.5读写Excel 97-2003格式(.xls)的文件,该格式无法更换。编写的测试脚本能正常读取文件并修改保存,但打开文件时会出现“We found a problem...”报错,手动保存后报错消失,但这会给客户造成困扰。需要实现无报错的修改保存,同时求推荐支持.xls文件的NuGet包(已试过ClosedXML、EPPlus,均不支持)。
测试代码
string filePath = @"C:\TEMP\Test.xls"; WorkBook workBook = WorkBook.Load(filePath); WorkSheet worksheet = workBook.WorkSheets[0]; for (int row = 1; row < 10000; row++) { string cell = $@"A{row}"; string cellValue = worksheet[cell].ToString(); if (cellValue == "") { worksheet[cell].Value = "New Value Here"; } } workBook.Save();
报错信息
打开保存后的文件时,Excel弹出“We found a problem...”提示框,手动保存文件后报错消失。
针对IronXL保存.xls文件报错的问题,可以尝试以下几种方法:
使用
SaveAs替代直接Save:直接覆盖原文件可能引发格式兼容性问题,先另存为临时文件再替换原文件:string tempPath = @"C:\TEMP\Test_Temp.xls"; workBook.SaveAs(tempPath); // 替换原文件 File.Delete(filePath); File.Move(tempPath, filePath);明确指定Excel格式版本:加载和保存时强制指定为Excel 97-2003格式,避免自动格式转换:
// 加载时指定格式 WorkBook workBook = WorkBook.Load(filePath, ExcelFileFormat.XLS); // 保存时指定格式 workBook.SaveAs(filePath, ExcelFileFormat.XLS);清理无效数据:IronXL可能在保存时引入无效格式元素,修改后清理未使用的空行/列:
// 移除未使用的空行 worksheet.RemoveEmptyRows(); // 移除未使用的空列 worksheet.RemoveEmptyColumns(); workBook.Save();
除IronXL外,以下包支持Excel 97-2003(.xls)格式读写:
NPOI:Apache开源库,完全支持.xls和.xlsx格式,无需依赖Office,适配.NET Framework 4.8。示例代码:
// 读取.xls文件 HSSFWorkbook workbook = new HSSFWorkbook(File.OpenRead(filePath)); ISheet sheet = workbook.GetSheetAt(0); // 修改单元格 IRow row = sheet.GetRow(0) ?? sheet.CreateRow(0); ICell cell = row.GetCell(0) ?? row.CreateCell(0); cell.SetCellValue("New Value Here"); // 保存文件 using (FileStream fs = File.Create(filePath)) { workbook.Write(fs); }ExcelDataReader:轻量级开源库,支持读取.xls和.xlsx,搭配ExcelDataWriter可实现写入,适合大数据量场景。
Microsoft.Office.Interop.Excel:依赖本地安装的Office Excel,完美兼容.xls格式,但要求客户机器安装Office,性能相对一般,适合小批量操作。
内容的提问来源于stack exchange,提问作者boilers222

