SpreadsheetGear Excel 使用 EPPLUS/NPOI 不可读

SpreadsheetGear Excel using EPPLUS/NPOI not readable

有人遇到过这个吗?我从客户端接收通过 SpreadsheetGear 生成的文件。如果我在 excel

中打开它看起来不错

但是如果我尝试通过 EPPLUS 或 NPOI 读取它无法将数据放入单元格

我相信 SpresheetGear 遗漏了一些属性。但是我不知道是哪一个

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

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

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

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

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

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

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

与 Tim 发布的内容类似,SpreadsheetGear 创建的文件包含没有单元格引用的单元格数据(A1、B3、H17 等)。根据我阅读规范文档(可用 here)第 19 页(共 5,000 多个 页)

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

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

虽然信息丰富,但这些知识对我并没有多大用处,因为我正在尝试处理一个完全不受我控制的生成的文件。也许对于其他人来说,情况并非如此。