2016-06-09 69 views
0

有没有人遇到过这个问题?我从客户端接收通过SpreadsheetGear生成的文件。如果我在ExcelSpreadsheetGear Excel使用EPPLUS/NPOI不可读

打开,但如果我试图通过EPPLUS或NPOI

阅读我相信SpresheetGear错过某些属性无法找到数据到细胞中,这看起来不错。但哪一个我不知道

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

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

回答

0

可能是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保存此文件类似,您应该会发现生成的文件比以前大。

1

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

与Tim发布的内容类似,SpreadsheetGear创建的文件包含没有单元格引用(A1,B3,H17,...)的单元格数据。这通过手动编辑传入似乎是19页根据我的规范文档的读取所需要的值(可here)(满分页)

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

在我的情况下,我添加了缺少的单元格引用到sheetData/row(r =“A1”)下面的'c'元素,以指示某些(但不是全部)失踪 这个属性。显然,这足以“欺骗”EPPlus文件解析器,以了解如何处理传入数据。

尽管内容丰富,但这些知识并没有给我带来太多的好处,因为我试图处理一个完全超出我的控制范围的文件。也许对于其他人来说,情况并非如此。

+0

我应该补充说我看到的问题仅限于'text'单元格值。这可能与EPPlus处理需要查找所有基于文本的单元格值引用的'sharedStrings.xml'资源的单元格的方式有关。 – rickus123