打开损坏的.xls文件

时间:2020-06-26 21:40:14

标签: c# .net excel .net-core

我正在使用ExcelDataReader读取.xls文件并提取数据。但是,由于无效的文件签名异常,我无法打开从外部设备获取的.xls文件(我可以使用Excel打开它,但是会弹出一个文件格式和扩展名不匹配,如果我还是想打开它的话。

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateReader(stream);

我尝试使用Interop打开它,但是,无法访问*** .xls文件。该文件可能已损坏,位于未响应的服务器上或只读异常。

Missing missing = Missing.Value;
Application excel = new Application();
Workbook workbook = excel.Workbooks.Open(filePath,
         missing, missing, missing, missing, missing,
         missing, missing, missing, missing, missing,
         missing, missing, missing, XlCorruptLoad.xlRepairFile);

有什么办法可以修复/还原/打开/读取那些损坏的文件?

p.s。使用Excel手动打开,并且 SaveAs 不是一个选项,因为我需要对数百个文件进行保存。

Hex content

1 个答案:

答案 0 :(得分:1)

https://support.microsoft.com/en-gb/office/file-formats-that-are-supported-in-excel-0943ff2c-6014-4e8d-aaea-b83d51d46247中,这些文件是XMLSS类型(2003 xml),应以.xml扩展名命名。这将使Excel不再抱怨内容与名称不匹配,并希望在尝试通过互操作时停止错误。

如果互操作无法解决,您可能会找到一个可以处理XMLSS的库,例如https://www.codeproject.com/Articles/8459/XmlSS-NET-Spreadsheet-Component,或者简单地将其读取为XML文件并提取所需的信息。可能是将其读取为数据集(先从da = new DataSet()ds.ReadXml(path_to_file)),然后才可以轻松地处理数据