使用EPPLUS/NPOI的电子表格Gear Excel不可读



有人见过这个吗?我从客户端收到通过SpreadsheetGear生成的文件。如果我在excel 中打开它,它看起来很好

但如果我试图通过EPPLUS或NPOI 读取,它无法在细胞中找到数据

我相信SpreetGear错过了一些属性。但是哪一个我不知道

如果我打开excel文件,然后保存为不同的文件(大小增加),然后通过EPPLUS/NPOI使用该文件,它就会工作。

不知道该告诉他们什么,因为我不知道Spreadsheetgear错过了什么。

SpreadsheetGear(由外部供应商)生成的xlsx文件也遇到了同样的问题,我正试图使用EPPlus解析该文件。当我遍历代码时,我可以看到所有的单元格值都存在,但它们是按顺序存储的(例如,单元格A1值显示在单元格A17的插槽中)。

与Tim发布的内容类似,SpreadsheetGear创建的文件包含没有单元格引用的单元格数据(A1、B3、H17

我已经通过手动编辑传入的xlsx文件来验证这是我的问题(您可以通过将文件重命名为.zip扩展名,然后手动编辑相应的sheet.xml文件,并将更新的版本添加回zip文件,将其重命名为xlsx,然后重试。)

在我的例子中,我在sheetData/row下添加了对'c'元素的缺失单元格引用(例如,r="A1"表示第1列第1行),其中一些(但不是全部)单元格缺少此属性。显然,这足以"欺骗"EPPlus文件解析器,使其知道如何处理传入数据。

虽然这些知识内容丰富,但对我来说并没有什么好处,因为我正试图处理一个完全无法控制的文件。也许对其他人来说,情况并非如此。

EPPlus可能依赖于某些与单元格地址相关的属性,这些属性在Open XML文件格式中标记为"可选",但SpreadsheetGear默认情况下不会写出这些属性,以减小文件的大小。

如果您可以访问生成这些文件的SpreadsheetGear应用程序,您可以尝试通过设置IWorkbookSet来更改它,将这些可选属性写入文件格式。将文件保存到磁盘之前,字符串OleDbOpenXmlWorkaround的实验属性。例如:

SpreadsheetGear.IWorkbookSet workbookSet = SpreadsheetGear.Factory.GetWorkbookSet();
workbookSet.Experimental = "OleDbOpenXmlWorkaround";
SpreadsheetGear.IWorkbook workbook = workbookSet.Workbooks.Open(@"C:myWorkbook.xlsx");
workbook.Save();

与通过Excel保存此文件类似,您应该会发现生成的文件比以前更大。

最新更新