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

标签 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 来处理此问题,而无需提前创建所有行?

最佳答案

就 Excel 而言 - 您无法采取任何措施使 Excel 接受以错误顺序写出的行。您必须以某种方式编写代码,以便以正确的顺序写出行。

-埃里克

关于c# - OpenXML - 行以错误的顺序写出,导致数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078346/

相关文章:

excel - 大型数据集的两个值的 if 语句

c# - 更改 Word 文档的边距

c# - 我想根据从 ASP.NET Core 6 的 API 收到的 XML 字符串创建 docx 文件

C# Asp.Net 创建文本文件,将其压缩并保存到 Blob - 无需将任何内容写入磁盘

c# - 使用 HttpContext 比使用 HttpApplication 有什么优势?

c# - TabStop 不工作

c# - 如何解析 WordOpenXML 输出中的 mathML?

c# - 在 GridView 的绑定(bind)字段中显示多个数据字段

excel - vbscript更新excel电子表格

Excel,WorkSheet_Change 给出未定义的子或函数