如何启用Excel工作表中的首行AutoFilter?

这是我生成Excel 2007 XLSX文件的小testing应用程序:

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; 

Excel2007单元是导入的Excel 2007types库。 这工作很好迄今。 不过,我想让这个标题行像这个截图一样自动过滤: AutoFilter的屏幕截图 不幸的是我所有的尝试通过OLE自动化来做到这一点,导致OLE或Variant例外。 任何想法我应该怎么做?

注意:数据不应被过滤 – 我只想要下拉button。

你需要指定你没有做的操作符。 例如:

 Worksheet.Cells.AutoFilter(1, EmptyParam, xlAnd, EmptyParam, True); 

请注意, Criteria1参数是可选的,可以省略,默认为'All'