我有xlsx文件,可以使用Excel成功打开,并且可以使用除EPPlus之外的其他excel库进行解析。我们可能会继续使用EPPlus,因此很容易就此问题获得一些建议。
Excel数据是没有格式化的纯文本数据。
使用C#解析EPPlus时,假设3x3表,解析后的数据会按照内存的方式进行分段(每行添加一个空单元格,因此总大小为3x9或者其他内容):
r1c1 r1c2 r1c3
r2c1 r2c2 r2c3
r3c1 r3c2 r3c3
而不是3x3数组
r1c1 r1c2 r1c3
r2c1 r2c2 r2c3
r3c1 r3c2 r3c3
使用zip查看器打开xlsx-archive时,xl \ worksheets \ sheet.xml似乎包含以下数据。
<x:row>
<x:c t="inlineStr">
<x:is>
<x:t>Data in cell</x:t>
</x:is>
</x:c>
..
</x:row>
因此,之前的代码段中没有任何行/列标识符。也许是问题的根本原因?
另一件需要注意的事情是,在Excel中打开并保存相同文件而不进行修改时,文件大小会增加,并且工作表数据似乎会从sheet.xml移动到sharedstrings.xml。在Excel中成功保存后,sheet1.xml中只存在行/列索引,并且可以使用EPPlus正确解析文件。
答案 0 :(得分:0)
在这种情况下的问题是工作表数据中没有行/列标识符。使用Open XML SDK使用自定义程序创建了不正确的Excel文件。
根据Open XML SDK准则(https://msdn.microsoft.com/en-us/library/office/gg278309.aspx),缺少行/列标识符是针对Excel数据格式的错误,因此问题不在EPPlus库中。