manejo - manipular archivos excel c#
Cómo congelar fila superior y aplicar filtro en automatización de Excel con C# (5)
Tengo automatización para crear un documento de Excel desde C #. Intento congelar la fila superior de mi hoja de trabajo y aplicar el filtro. Esto es lo mismo que en Excel 2010 si selecciona Ver> Congelar paneles> Congelar fila superior, y luego después de seleccionar fila superior Datos> Filtro. No tengo idea de cómo aplicar el filtro, pero lo siguiente es lo que probé para congelar la fila superior y simplemente congeló toda la hoja de trabajo. ¿Alguien tiene una solución a mi problema? El problema del filtro de datos es donde necesito más ayuda, así que si alguien tiene una solución para eso, por favor, ilumíname.
Muchas gracias, KBP
workSheet.Activate();
Excel.Range firstRow = (Excel.Range)workSheet.Rows[1];
firstRow.Activate();
firstRow.Select();
firstRow.Application.ActiveWindow.FreezePanes = true;
¡Me lo imaginé!
La solución de @Jaime para congelar la fila superior funcionó perfectamente. Y la siguiente es mi solución para aplicar el filtro:
Gracias, 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);
// ruta de acceso donde el archivo de Excel se mantiene 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);
Las siguientes soluciones funcionan bien, pero congelan la primera fila de la instantánea visible actual de la hoja. Por ejemplo: si su instantánea visible de la hoja actual es de la fila 43 a algún número digamos 90 ... entonces la fila de congelación se aplica a 43.
Si solo desea que se congele la primera fila de la hoja (fila del encabezado), sin importar la posición de desplazamiento de Excel, la siguiente solución funcionó para mí. Este código desplaza la hoja de Excel a la fila 1. Debe almacenar la posición si desea volver a la posición anterior antes de congelarla.
worksheet.Application.ActiveWindow.ScrollRow = 1;
worksheet.Application.ActiveWindow.SplitRow = 1;
worksheet.Application.ActiveWindow.FreezePanes = true;
Prueba esto...
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();
Podría haber algún System.Reflection.Missing.Value
que deba pasar con los argumentos, pero este fue el código de VB.Net que he convertido de mi mente.