如何使用C#冻结顶行并在Excel Automation中应用过滤器

时间:2011-02-20 22:22:50

标签: c# excel vba office-interop export-to-excel

我可以自动从C#创建Excel文档。我试图冻结我的工作表的顶行并应用过滤器。如果选择“视图”>这与Excel 2010中的相同。冻结窗格>冻结顶行,然后选择顶行数据>过滤。我不知道如何应用过滤器,但以下是我尝试冻结顶行,它只是冻结整个工作表。有没有人能解决我的问题。数据过滤问题是我需要更多帮助的地方,所以如果有人有解决方案,请赐教。

非常感谢, KBP

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

5 个答案:

答案 0 :(得分:58)

我明白了!

@ Jaime解冻顶行的解决方案完美无缺。以下是我应用过滤器的解决方案:

谢谢, 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);

答案 1 :(得分:30)

试试这个......

workSheet.Activate();
workSheet.Application.ActiveWindow.SplitRow = 1;
workSheet.Application.ActiveWindow.FreezePanes = true;

答案 2 :(得分:6)

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需要与参数一起传递,但这是我已经转换出来的VB.Net代码。

答案 3 :(得分:1)

以下解决方案工作正常,但它冻结了工作表当前可见快照的第一行。例如:如果您当前的工作表可见快照是从第43行到某个数字说90 ..那么冻结行将应用于43。

如果您只希望冻结第一行工作表(标题行),无论excel滚动位置如何,那么下面的解决方案对我有效。此代码将Excel工作表向上滚动到第1行。如果要在冻结之前返回上一个位置,则必须存储该位置。

individual

答案 4 :(得分:1)

//保存excel文件的路径             string ResultsFilePath = @“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);