Как заморозить Top Row и применить фильтр в Excel Automation с C # - PullRequest
41 голосов
/ 21 февраля 2011

У меня есть автоматизация для создания документа Excel из C #. Я пытаюсь заморозить верхний ряд моего листа и применить фильтр. Это то же самое, что и в Excel 2010, если вы выберете «Вид»> «Стоп-панели»> «Стоп-кадр», а затем после выбора «Строка данных»> «Фильтр». Я понятия не имею, как применить фильтр, но вот то, что я пытался заморозить верхний ряд, и он просто заморозил весь лист. У кого-нибудь есть решение моей проблемы. Проблема с фильтром данных - вот где мне нужна дополнительная помощь, поэтому, если у кого-то есть решение, пожалуйста, просветите меня.

Большое спасибо, КБП

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

Ответы [ 5 ]

59 голосов
/ 21 февраля 2011

Я понял это!

@ Решение Хайме заморозить верхний ряд сработало отлично. И вот мое решение для применения фильтра:

Спасибо, КБП

// 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);
31 голосов
/ 21 февраля 2011

Попробуйте это ...

workSheet.Activate();
workSheet.Application.ActiveWindow.SplitRow = 1;
workSheet.Application.ActiveWindow.FreezePanes = true;
6 голосов
/ 21 февраля 2011
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, который я передумал.

1 голос
/ 09 ноября 2017

// путь к файлу 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);
1 голос
/ 04 ноября 2017

Приведенные ниже решения работают нормально, но замораживает первый ряд текущего видимого снимка листа. Например: если ваш текущий видимый снимок листа находится в ряду от 43 до некоторого числа, скажем, 90 ..., то строка замораживания применяется к 43.

Если вы хотите, чтобы был заморожен только самый первый ряд листа (строка заголовка), независимо от положения прокрутки в Excel, то приведенное ниже решение сработало для меня. Этот код прокручивает таблицу Excel до строки 1. Вам нужно сохранить позицию, если вы хотите вернуться к предыдущей позиции перед остановкой.

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