使用带有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停止工作'...
答案 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);
...