Autofilter排序崩溃excel,这是通过使用C#与Open xml excel创建的

时间:2014-11-05 14:12:48

标签: c# xml excel

使用带有openxml的C#,我已经使用一些数据生成了excel文档,我使用下面的代码在excel中添加了autofilter选项,

        string reference= "B6:BA6";
        AutoFilter autoFilter1 = new AutoFilter() { Reference = reference };

        Worksheet sheet1 = new Worksheet();
        sheet1.Append(sheetData);
        sheet1.Append(autoFilter1);

过滤器工作正常,我尝试使用新创建的Excel中的autofilter选项对数据进行排序,但它会崩溃整个Excel,它会显示错误消息,例如'Excel停止工作'...

1 个答案:

答案 0 :(得分:2)

似乎Excel声明了一个" definedName"在workbook.xml中进行排序。

Excel生成的内容如下所示:

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

使用Open XML Sdk来模仿这种行为似乎可以解决问题:

...
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);
...