C#からエクセルシートをピボット集計して出力する方法

C#

C#からエクセルを出力する際に合計シートからピボット集計したシートも付与して欲しいと要望があり、
色々調べるもニッチ過ぎて手こずったので備忘録。

スポンサーリンク

コード:MakePivot

 

省略してますがエクセル起動・保存・終了等は他の関数で行ってるので、
この関数内では与えられたシート名に対してピボットを作成し、新しいシートを作って付与する作業のみ行っています。
参照:using Microsoft.Office.Interop.Excel;


        /////////////////////////////////////////////////////////
        //  概要:ピボットシート作成処理                     
        //  はまみ:2019/11/12                                 
        /////////////////////////////////////////////////////////
        public Boolean MakePivot(string strSheetName)
        {
            Boolean bRet = true;

            try
            {
                // ピボットデータ下準備
                var pch = ObjWorkBook.PivotCaches();
                Excel.Worksheet ObjSheet = (Excel.Worksheet)ObjWorkBook.Sheets[strPivotSheet];
                Excel.Range pivotData = ObjSheet.UsedRange;
                Excel.PivotCache pc = pch.Create(XlPivotTableSourceType.xlDatabase, pivotData);

                // ピボットデータシートを作成※ピボットしたいシートの次に配置
                Worksheet pivotWorkSheet = ObjWorkBook.Sheets.Add(After: ObjWorkBook.Sheets[strPivotSheet]);
                // ピボットデータシート名称変更
                pivotWorkSheet.Name = "Pivot";
                // ピボット作成※ピボットデータシートA1へ配置
                Excel.PivotTable pvt = pc.CreatePivotTable(pivotWorkSheet.Range["A1"]);
                // 行ラベル設定
                pvt.PivotFields("選手名").Orientation = XlPivotFieldOrientation.xlRowField;
                // 集計行設定
                pvt.AddDataField(pvt.PivotFields("得点"), "合計/得点", XlConsolidationFunction.xlSum);
                pvt.AddDataField(pvt.PivotFields("失点"), "合計/失点", XlConsolidationFunction.xlSum);
            }
            catch ()
            {
                bRet = false;
            }

            return bRet;
        }

※本当はTryCatchもうちょっと細分化さしてエラーメッセージちゃんと返した方がベスト

使用例

 

例えばこんな得失点表があったとします。

で、上記MakePivotにシート名”日本”を渡してやると下記シートが付与されます↓

事務や経理等で大活躍のピボットテーブルなので、試す機会があれば是非ご活用下さい~(ᵔᴥᵔ)

コメント