OpenXML - 以错误的顺序写出的行导致数据丢失

时间:2013-02-25 23:12:52

标签: c# excel openxml-sdk

我正在使用openxml-sdk生成一个excel文件,在打开文件时它告诉我该文件已损坏并提供修复它。修复执行以下操作:

Removed Records: Cell information from /xl/worksheets/sheet.xml part
Repaired Records: Cell information from /xl/worksheets/sheet.xml part

此修复导致丢失一些数据,我查看了XML并发现数据似乎已被删除,因为遇到合并单元格时行已无序写入。

<x:sheetData>
    <x:row r="8">
         ...
    </x:row>
    <x:row r="16">
         ...
    </x:row>
    <x:row r="9">
         ...
    </x:row>
    <x:row r="10">
         ...
    </x:row>
    ...
</x:sheetData>
<x:mergeCells>
    ...
<x:mergeCell ref="C8:C16" />
    ...
</x:mergeCells>

正如上面所示,有一个C8:C16的合并,无论在哪里发生这样的合并,它似乎都会为第一行和最后一行写入行,然后继续全部在中间。但是,打开此excel似乎无法应对并删除所有乱序行(9-15)。

我已经通过手动重新排列XML中的行然后重新拉链来确认这一点。然后它将显示所有数据。

我猜这是因为我先创建第16行然后第9行,以便我可以进行合并。有没有办法重新排序行或获得excel来处理这个而不必提前创建所有行?

1 个答案:

答案 0 :(得分:1)

就Excel而言 - 没有什么可以让Excel接受以错误顺序写出的行。您必须以某种方式编写代码,以便按正确的顺序写出行。

-Eric