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にシート名”日本”を渡してやると下記シートが付与されます↓
事務や経理等で大活躍のピボットテーブルなので、試す機会があれば是非ご活用下さい~(ᵔᴥᵔ)
コメント