从.xlsx文件读取.xls文件时出现Gembox错误

时间:2014-02-25 11:36:10

标签: c# excel ole gembox-spreadsheet

我有一个 .xlsx 文件,我已将文件扩展名更改为 .xls ,我正在尝试使用Gembox库阅读它。问题是,当我尝试使用GemboxExcel.LoadXls(fileName);方法读取文件时,我收到以下错误:

  

异常消息:分析失败:读取错误:文件无效   OLE2复合文件。异常堆栈跟踪:System.Exception:Analysis   失败:读取错误:文件不是有效的OLE2复合文件。 --->   GemBox.CompoundFileException:读取错误:文件不是有效的OLE2   复合文件。在GemBox.ReadData.ReadHeader(BinaryReader br,   的ArrayList和放大器; masterAllocationTable)at   GemBox.ReadData..ctor(Ole2CompoundFile ole2File,Stream inputStream)
  在GemBox.Ole2CompoundFile.Load(Stream stream,Boolean loadOnDemand)
  在GemBox.Spreadsheet.ExcelFile.ReadStreamHelper(ExcelFile excelFile,   Stream inputStream,Boolean readSummaryStreams,Byte []& ss,Byte []&   dss,Boolean readMacros,Byte []& ctls,Byte []& compObj,Ole2Storage&   mStorage,String fileName)at   GemBox.Spreadsheet.ExcelFile.LoadXls(String fileName,XlsOptions   xlsOptions

问题是如果我从Excel保存文件(Microsoft Excel - >另存为 - > .xls文件)然后我在我的程序中打开文件并使用GemboxExcel.LoadXls(fileName);方法,它工作正常。

我已在我的计算机上安装了Microsoft Office Compatibility Pack,但它不起作用。

有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:2)

只需重命名文件扩展名(例如从“Book1.xlsx”更改为“Book1.xls”)即可更改此文件的内容,也不会更改其中使用的文件格式。

您看到这些格式非常不同,XLS是基于二进制的文件格式,而XLSX是基于XML的文件格式。我不确定你为什么要将它重命名为.XLS扩展名,但是现在你有一个文件格式和扩展名不匹配的文件,你需要将它作为XLSX文件加载(因为它仍然是一个XLSX文件格式)。

ExcelFile file = new ExcelFile(); file.LoadXlsx("Book1.xls", XlsxOptions.None);

如果要将XLSX文件转换为XLS文件,请尝试以下操作:

ExcelFile file = new ExcelFile(); file.LoadXlsx("Book1.xlsx", XlsxOptions.None); file.SaveXls("Book1.xls");

这与“Microsoft Excel - >另存为 - > .xls文件”操作具有相同的效果。