Как заморозить верхнюю строку и применить фильтр в Excel Automation с помощью С#
У меня есть автоматизация для создания документа Excel из С#. Я пытаюсь заморозить верхний ряд моего листа и применить фильтр. Это то же самое, что и в Excel 2010, если вы выберите "Просмотр" > "Стоп-кадр" > "Стоп-кадр", а затем после выбора верхней строки "Данные" > "Фильтр". Я не знаю, как применить фильтр, но вот что я пробовал для замораживания верхней строки, и это просто заморозило весь рабочий лист. У кого-нибудь есть решение моей проблемы. Проблема фильтра данных - это то, где мне нужна дополнительная помощь, поэтому, если у кого-то есть решение, пожалуйста, просветите меня.
Большое спасибо,
КБП
workSheet.Activate();
Excel.Range firstRow = (Excel.Range)workSheet.Rows[1];
firstRow.Activate();
firstRow.Select();
firstRow.Application.ActiveWindow.FreezePanes = true;
Ответы
Ответ 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);