0

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

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

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

我已经在我的机器上安装了Microsoft Office 兼容包,但它不起作用。

有人遇到过这个问题吗?

4

1 回答 1

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 文件”操作相同的效果。

于 2014-03-13T09:33:03.150 回答