Подтвердить что ты не робот

Как заморозить верхнюю строку и применить фильтр в Excel Automation с помощью С#

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

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

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

Ответ 1

Я понял это!

Решение

@Jaime для замораживания верхнего ряда отлично работало. И вот мое решение для применения фильтра:

Спасибо, КБП

// 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);

Ответ 2

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

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

Ответ 3

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, который я преобразовал из своего разума.

Ответ 4

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

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

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

Ответ 5

//путь сохранен в файле 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);