如何冻结顶部行,并在C#中使用Excel自动化应用筛选器

我有自动从C#创build一个Excel文档。 我试图冻结我的工作表的第一行,并应用filter。 如果您select“查看”>“冻结窗格”>“冻结顶部行”,然后select“顶部行数据”>“filter”,则这与Excel 2010中的相同。 我不知道如何应用filter,但以下是我试图冻结最上面一行,它只是冻结了整个工作表。 有没有人有我的问题的解决scheme。 数据filter的问题是我需要更多的帮助,所以如果有人有一个解决scheme,请赐教。

非常感谢,KBP

workSheet.Activate(); Excel.Range firstRow = (Excel.Range)workSheet.Rows[1]; firstRow.Activate(); firstRow.Select(); firstRow.Application.ActiveWindow.FreezePanes = true; 

我想到了!

@海梅解决scheme冻结顶行工作完美。 以下是我应用filter的解决scheme:

谢谢,KBP

 // Fix first row workSheet.Activate(); workSheet.Application.ActiveWindow.SplitRow = 1; workSheet.Application.ActiveWindow.FreezePanes = true; // Now apply autofilter Excel.Range firstRow = (Excel.Range)workSheet.Rows[1]; firstRow.AutoFilter(1, Type.Missing, Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true); 

尝试这个…

 workSheet.Activate(); workSheet.Application.ActiveWindow.SplitRow = 1; workSheet.Application.ActiveWindow.FreezePanes = true; 
 workSheet.EnableAutoFilter = true; workSheet.Cells.AutoFilter(1); //Set the header-row bold workSheet.Range["A1", "A1"].EntireRow.Font.Bold = true; //Adjust all columns workSheet.Columns.AutoFit(); 

可能有一些System.Reflection.Missing.Value需要与parameter passing,但这是VB.Net代码,我已经转换了我的脑海。

上面的解决scheme工作正常,但它冻结当前表单可视快照的第一行。 例如:如果您当前的表格可见快照是从第43行到某个数字,如90 ..然后冻结行正在申请43。

如果只希望第一行的表格(标题行)被冻结,无论是滚动位置,那么下面的解决scheme为我工作。 此代码将Excel表格向上滚动到第1行。如果要在冻结之前返回到之前的位置,则必须存储该位置。

 worksheet.Application.ActiveWindow.ScrollRow = 1; worksheet.Application.ActiveWindow.SplitRow = 1; worksheet.Application.ActiveWindow.FreezePanes = true; 

// path是excel文件保存stringResultsFilePath = @“C:\ Users \ krakhil \ Desktop \ FolderName \ FileNameWithoutExtension”;

  Excel.Application ExcelApp = new Excel.Application(); Excel.Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(ResultsFilePath); ExcelApp.Visible = true; //Looping through all available sheets foreach (Excel.Worksheet ExcelWorksheet in ExcelWorkbook.Sheets) { //Selecting the worksheet where we want to perform action ExcelWorksheet.Select(Type.Missing); //Making sure first row is selected - else split and freeze will happen //On the visible part and not from the top Excel.Range activeCell = ExcelWorksheet.Cells[1, 1]; activeCell.Select(); //Applying auto filter to Row 10 activeCell = (Excel.Range)ExcelWorksheet.Rows[10]; activeCell.AutoFilter(1, Type.Missing, Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true); //Split the pane and freeze it ExcelWorksheet.Application.ActiveWindow.SplitRow = 10; ExcelWorksheet.Application.ActiveWindow.FreezePanes = true; //Auto fit all columns ExcelWorksheet.Columns.AutoFit(); //Releasing range object Marshal.FinalReleaseComObject(activeCell); } //saving excel file using Interop ExcelWorkbook.Save(); //closing file and releasing resources ExcelWorkbook.Close(Type.Missing, Type.Missing, Type.Missing); Marshal.FinalReleaseComObject(ExcelWorkbook); ExcelApp.Quit(); Marshal.FinalReleaseComObject(ExcelApp);