使用 EPPlus C# 读取 inlineStr 单元格时出现断行

Broken rows when reading inlineStr cells with EPPlus C#

我有 xlsx 文件,它可以用 Excel 成功打开,并且可以用除 EPPlus 之外的其他 excel 库进行解析。我们可能会继续使用 EPPlus,因此很高兴就此问题获得一些建议。

Excel里面的数据是没有格式化的纯文本数据。

当使用 EPPlus 和 C# 进行解析时,比方说 3x3 sheet,解析后的数据按照内存的方式碎片化(空单元格添加到每一行,因此总大小为 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>

因此,之前的代码片段中没有任何 row/column 标识符。也许是问题的根本原因?

另一件需要注意的事情是,当在 Excel 中打开和保存相同的文件而不修改时,文件大小会增加并且 sheet 数据似乎从 sheet.xml 移动到 sharedstrings.xml.在 Excel 中成功保存后,sheet1.xml 中仅存在 row/column 个索引,并且可以使用 EPPlus 正确解析文件。

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

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