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 の行を手動で並べ替えてから再圧縮することで、これを確認しました。その後、すべてのデータが表示されます。
これは、マージを実行できるように行 9 よりも前に行 16 を作成したために発生したと推測しています。すべての行を事前に作成しなくても、行を並べ替える方法や Excel でこれを処理する方法はありますか?