Вот мое маленькое тестовое приложение, которое генерирует 2007 XLSX файл Excel:Как включить AutoFilter для верхнего ряда в листе Excel?
uses
Excel2007;
function CreateExportExcelWorkbook(AApp: ExcelApplication; ALCID: Integer): ExcelWorkbook;
var
OldDefaultSaveFormat: XlFileFormat;
begin
OldDefaultSaveFormat := AApp.DefaultSaveFormat;
AApp.DefaultSaveFormat := xlOpenXMLWorkbook;
try
Result := AApp.Workbooks.Add(xlWBATWorksheet, ALCID);
finally
AApp.DefaultSaveFormat := OldDefaultSaveFormat;
end;
end;
procedure FixTopRows(AApp: ExcelApplication; ARowCount: Integer);
var
ActiveWindow: Window;
begin
ActiveWindow := AApp.ActiveWindow;
ActiveWindow.SplitColumn := 0;
ActiveWindow.SplitRow := ARowCount;
ActiveWindow.FreezePanes := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
cRowCount = 200;
cColCount = 10;
var
LCID: Integer;
ExcelApp: ExcelApplication;
Workbook: ExcelWorkbook;
Worksheet: ExcelWorksheet;
i, j: Integer;
FVarArray: Variant;
Cell1, Range: ExcelRange;
begin
LCID := GetUserDefaultLCID;
ExcelApp := CoExcelApplication.Create;
try
ExcelApp.Visible[LCID] := False;
ExcelApp.UserControl := False;
ExcelApp.DisplayAlerts[LCID] := False;
Workbook := CreateExportExcelWorkbook(ExcelApp, LCID);
Worksheet := Workbook.Worksheets.Item[1] as ExcelWorksheet;
FVarArray := VarArrayCreate([0, cRowCount - 1, 0, cColCount - 1], varVariant);
for j := 0 to cColCount - 1 do
FVarArray[0, j] := Format('Column %d', [j]);
for i := 1 to cRowCount - 1 do
for j := 0 to cColCount - 1 do
FVarArray[i, j] := 100 * i + j;
Cell1 := Worksheet.Cells.Range['A1', 'A1'];
Range := Worksheet.Range[Cell1, Cell1.Offset[cRowCount - 1, cColCount - 1]];
Range.Value[EmptyParam] := FVarArray;
VarClear(FVarArray);
Range.EntireColumn.AutoFit;
FixTopRows(ExcelApp, 1);
Range := Worksheet.Range[Cell1, Cell1.Offset[0, cColCount - 1]];
//Range := Cell1.EntireRow;
//Range.AutoFilter(1, 'All', EmptyParam, EmptyParam, True);
Workbook.SaveAs(ExpandFileName('test.xlsx'), EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
xlNoChange, EmptyParam, False, EmptyParam, EmptyParam, EmptyParam, LCID);
finally
ExcelApp.Quit;
end;
end;
Unit Excel2007
импортный Excel 2007 библиотеки типов. Пока это прекрасно. Однако я хотел бы сделать строку заголовка автоматической фильтрацией, как на этом скриншоте: К сожалению, все мои попытки сделать это с помощью автоматизации OLE привели к исключениям OLE или Variant. Любая идея, как я должен действовать?
NB: Данные не следует фильтровать - мне просто нужны раскрывающиеся кнопки.
Так просто ... Спасибо, @ Давид! –