C#からエクセルを出力する際に合計シートからピボット集計したシートも付与して欲しいと要望があり、
色々調べるもニッチ過ぎて手こずったので備忘録。
コード:MakePivot
省略してますがエクセル起動・保存・終了等は他の関数で行ってるので、
この関数内では与えられたシート名に対してピボットを作成し、新しいシートを作って付与する作業のみ行っています。
参照:using Microsoft.Office.Interop.Excel;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
///////////////////////////////////////////////////////// // 概要:ピボットシート作成処理 // はまみ: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にシート名”日本”を渡してやると下記シートが付与されます↓
事務や経理等で大活躍のピボットテーブルなので、試す機会があれば是非ご活用下さい~(ᵔᴥᵔ)
コメント