【问题标题】:Open corrupted .xls file打开损坏的 .xls 文件
【发布时间】:2020-06-26 21:40:14
【问题描述】:

我正在使用 ExcelDataReader 读取 .xls 文件并提取数据。但是,由于 Invalid file signature 异常,我无法打开从外部设备获取的 .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);

有没有办法修复/恢复/打开/读取那些损坏的文件?

附言使用 Excel 手动打开并执行 SaveAs 不是一个选项,因为我需要为数百个文件执行此操作。

【问题讨论】:

  • 您是否考虑过为这些文件提供适当的文件扩展名?您确定它们实际上不是具有 .xls 名称的 .xlsx 格式文件吗?
  • 在我看来,鉴于 Excel 可以打开它们(带有警告),就像文件没有被损坏,而是被错误命名。
  • 在十六进制编辑器中打开文件并向我们显示内容的屏幕截图
  • 我用 hex sn-p 编辑了我的帖子
  • 尝试将其扩展名更改为.zip 并提取它,然后检查您的工作表`\Book11.xlsx\xl\worksheet`

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


【解决方案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))提供了一种处理数据的简单方法

【讨论】:

  • 这正是我昨天所做的,我什至还没有注意到你的评论。但是,将其标记为已接受!谢谢!
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多