modificar manipular manejo llenar libro filas desde crear contar combinar centrar celdas archivos archivo abrir c# excel vba office-interop export-to-excel

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.