【问题标题】:SpreadsheetGear Excel using EPPLUS/NPOI not readable使用 EPPLUS/NPOI 的 SpreadsheetGear Excel 不可读
【发布时间】:2016-08-18 03:49:23
【问题描述】:

有人遇到过这个吗?我从客户端收到通过 SpreadsheetGear 生成的文件。用excel打开就好了

但如果我尝试通过 EPPLUS 或 NPOI 读取,它无法在单元格中找到数据

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

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

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

【问题讨论】:

    标签: .net vb.net epplus npoi spreadsheetgear


    【解决方案1】:

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

    与 Tim 发布的内容类似,SpreadsheetGear 创建的文件包含没有单元格引用的单元格数据(A1、B3、H17、...)。根据我对第 19 页(超过 5,000 页的)规范文档(here)的阅读,这似乎是必需值

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

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

    虽然内容丰富,但这些知识对我并没有多大好处,因为我正在尝试处理一个文件,而该文件的生成完全超出了我的控制。也许对其他人来说,情况并非如此。

    【讨论】:

    • 我应该补充一点,我看到的问题仅限于“文本”单元格值。这可能与 EPPlus 处理需要查找所有基于文本的单元格值引用的“sharedStrings.xml”资源的单元格的方式有关。
    【解决方案2】:

    可能是 EPPlus 依赖于某些与单元格地址相关的属性,这些属性在 Open XML 文件格式中标记为“可选”,但 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保存这个文件,你应该会发现生成的文件比以前大了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 2017-05-25
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多