Pertanyaan Cara Membekukan Baris Atas dan Terapkan Filter di Otomatisasi Excel dengan C #


Saya memiliki otomatisasi untuk membuat dokumen Excel dari C #. Saya mencoba membekukan baris atas lembar kerja saya dan menerapkan filter. Ini sama seperti di Excel 2010 jika Anda memilih Lihat> Bekukan Panes> Bebaskan baris atas, lalu setelah memilih baris atas Data> Filter. Saya tidak tahu bagaimana menerapkan filter, tetapi yang berikut adalah apa yang saya coba untuk membekukan baris atas dan itu hanya membekukan seluruh lembar kerja. Apakah ada yang punya solusi untuk masalah saya. Masalah filter data adalah di mana saya butuh bantuan lebih banyak jadi jika ada yang punya solusi untuk itu, tolong ceritakan saya.

Terimakasih banyak, KBP

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

40
2018-02-20 22:22


asal


Jawaban:


Saya menemukan jawabannya!

Solusi @ Jaime untuk membekukan baris teratas bekerja dengan sempurna. Dan berikut ini adalah solusi saya untuk menerapkan filter:

Terima kasih, 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);

55
2018-02-20 23:15



Coba ini...

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

29
2018-02-20 22:34



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

Mungkin ada beberapa System.Reflection.Missing.Value yang perlu dilewatkan dengan argumen, tetapi ini adalah kode VB.Net yang saya ubah dari pikiran saya.


6
2018-02-20 23:10



// path adalah file excel disimpan             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);

0
2017-11-09 09:11



Solusi di bawah berfungsi dengan baik, tetapi membeku baris pertama dari snapshot yang terlihat saat ini dari lembar. Misalnya: Jika snapshot yang terlihat pada lembar Anda saat ini dari baris 43 ke beberapa angka, katakan 90 .. maka pembekuan baris akan diterapkan ke 43.

Jika Anda hanya menginginkan baris pertama dari baris (baris judul) untuk dibekukan, tidak peduli posisi gulir excel, maka solusi di bawah ini bekerja untuk saya. Kode ini menggulung lembar excel ke baris 1. Anda harus menyimpan posisi jika Anda ingin kembali ke posisi sebelumnya sebelum membeku.

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

0
2017-11-04 17:01