Come bloccare la riga superiore e applicare il filtro in Excel Automation con C #

Ho l’automazione per creare un documento Excel da C #. Sto cercando di bloccare la prima riga del mio foglio di lavoro e applicare il filtro. È lo stesso di Excel 2010 se si seleziona Visualizza> Blocca riquadri> Blocca riga superiore, quindi dopo aver selezionato Dati riga superiore> Filtro. Non ho idea di come applicare il filtro, ma quanto segue è quello che ho provato per il congelamento della riga in alto e ha semplicemente congelato l’intero foglio di lavoro. Qualcuno ha una soluzione al mio problema. Il problema del filtro dei dati è dove ho bisogno di più aiuto, quindi se qualcuno ha una soluzione per questo mi illumini.

Molte grazie, KBP

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

L’avevo capito!

@ La soluzione di Jaime per congelare la fila superiore ha funzionato perfettamente. E la seguente è la mia soluzione per applicare il filtro:

Grazie, 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); 

Prova questo…

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

Potrebbero esserci alcuni System.Reflection.Missing.Value che devono essere passati con gli argomenti, ma questo era il codice VB.Net che ho convertito dalla mia mente.

Le soluzioni sottostanti stanno funzionando bene, ma sta congelando la prima riga dell’istantanea visibile corrente del foglio. Ad esempio: se l’istantanea visibile del foglio corrente è dalla riga 43 a qualche numero dice 90 .. allora il blocco della riga viene applicato a 43.

Se si desidera solo la prima riga di foglio (riga di intestazione) da congelare, indipendentemente dalla posizione di scorrimento di Excel, la soluzione di seguito ha funzionato per me. Questo codice consente di scorrere il foglio excel sulla riga 1. È necessario memorizzare la posizione se si desidera tornare alla posizione precedente prima di bloccare.

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

// percorso è stato mantenuto il file excel stringa 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);