自动筛选排序使excel崩溃,excel是通过使用C#和Open xml excel创建的

本文关键字:excel Open xml 创建 筛选 排序 崩溃 | 更新日期: 2023-09-27 18:29:18

使用C#和openxml,我生成了包含一些数据的excel文档,我使用以下代码在excel中添加了自动筛选选项

        string reference= "B6:BA6";
        AutoFilter autoFilter1 = new AutoFilter() { Reference = reference };
        Worksheet sheet1 = new Worksheet();
        sheet1.Append(sheetData);
        sheet1.Append(autoFilter1);

过滤器工作正常,我试图在新创建的Excel中使用自动过滤器选项对数据进行排序,但它会破坏整个Excel,它会显示错误消息,如"Excel停止工作"。。。

自动筛选排序使excel崩溃,excel是通过使用C#和Open xml excel创建的

Excel似乎在workbook.xml中声明了一个"definedName",以便排序工作。

Excel生成的文件如下所示:

...
</sheets>
<definedNames>
    <definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">Sheet1!$D$7:$G$7</definedName>
</definedNames>
...

使用OpenXMLSdk来模仿这种行为似乎可以达到目的:

...
worksheet.Append(new AutoFilter {Reference = "B6:BA6"});
var definedNames = new DefinedNames();
var definedName = new DefinedName
{
    Text = "YourSheetName!$B$6:$BA$6",
    Name = "_xlnm._FilterDatabase",
    LocalSheetId = 0,
    Hidden = true,
};
definedNames.Append(definedName);
spreadsheetDocument.WorkbookPart.Workbook.Append(definedNames);
...