使用EPPlus C#读取inlineStr单元格时行损坏

时间:2017-11-02 13:38:11

标签: epplus

我有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正确解析文件。

1 个答案:

答案 0 :(得分:0)

在这种情况下的问题是工作表数据中没有行/列标识符。使用Open XML SDK使用自定义程序创建了不正确的Excel文件。

根据Open XML SDK准则(https://msdn.microsoft.com/en-us/library/office/gg278309.aspx),缺少行/列标识符是针对Excel数据格式的错误,因此问题不在EPPlus库中。