Используя С# с 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 объявляет "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);
...