web-dev-qa-db-ja.com

C#を使用してExcelオートメーションで一番上の行をフリーズしてフィルターを適用する方法

C#からExcelドキュメントを作成する自動化があります。ワークシートの一番上の行をフリーズしてフィルターを適用しようとしています。これは、[表示]> [ペインの固定]> [最上行の固定]を選択し、[最上行のデータ]> [フィルター]を選択した後のExcel 2010と同じです。フィルターの適用方法はわかりませんが、次は最上行をフリーズするために試したもので、ワークシート全体をフリーズしました。誰かが私の問題の解決策を持っていますか。データフィルターの問題は、私がより多くの助けを必要とするところですので、誰かがそれに対する解決策を持っているなら、私を啓発してください。

ありがとう、KBP

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

私はそれを考え出した!

一番上の行をフリーズする@Jaimeのソリューションは完璧に機能しました。そして、以下はフィルターを適用するための私の解決策です:

ありがとう、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);
61
KBP

これを試して...

workSheet.Activate();
workSheet.Application.ActiveWindow.SplitRow = 1;
workSheet.Application.ActiveWindow.FreezePanes = true;
32
Jaime Oro
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コードでした。

6
Koen

// Excelファイルが保持されるパスstring stringFilesFilePath = @ "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);
2
KR Akhil

以下のソリューションは正常に機能していますが、現在表示されているシートのスナップショットの最初の行を凍結しています。例:現在のシートの表示可能なスナップショットが43行目から90などの数値の場合、フリーズ行は43に適用されます。

Excelのスクロール位置に関係なく、シートの最初の行(見出し行)のみをフリーズしたい場合は、以下の解決策が有効でした。このコードは、Excelシートを1行目までスクロールします。フリーズする前に前の位置に戻る場合は、位置を保存する必要があります。

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