ピボットテーブルは、データを意味のある方法で表すためにデータを再配置します。これらはさまざまな並べ替えオプションを提供し、データをグループ化することで合計、平均、またはその他の統計を提供します。これはデータ分析に不可欠なツールであり、MSExcelの基本的な部分です。プログラムでピボットテーブルを作成および操作する必要があるシナリオに遭遇する可能性があります。そのために、この記事では、C++を使用してExcelファイルのピボットテーブルを操作する方法を説明します。

Excelファイルでピボットテーブルを操作するためのC++API

Aspose.Cells for C++はネイティブC++ライブラリであり、Microsoft Excelをインストールしなくても、Excelファイルを作成、読み取り、更新できます。 APIは、Excelファイルでのピボットテーブルの操作もサポートしています。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

PM> Install-Package Aspose.Cells.Cpp

C++を使用してExcelファイルにピボットテーブルを作成する

次の例では、新しいExcelファイルを作成し、そのファイルにサンプルデータを挿入して、ピボットテーブルを作成します。この例で生成されたファイルは、他の例のソースファイルとして使用されます。以下は、Excelファイルにピボットテーブルを作成する手順です。

次のサンプルコードは、C++を使用してExcelファイルにピボットテーブルを作成する方法を示しています。

// ソースディレクトリのパス。
StringPtr srcDir = new String("SourceDirectory\\");

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// IWorkbookクラスのインスタンスを作成します
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// 最初のワークシートにアクセスする
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// ピボットテーブルのソースデータを追加する
intrusive_ptr<String> str = new String("Fruit");
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(str);
str = new String("Quantity");
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(str);
str = new String("Price");
worksheet->GetICells()->GetObjectByIndex(new String("C1"))->PutValue(str);
str = new String("Apple");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);
str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(str);
str = new String("Mango");
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(str);
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(3);
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("B4"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("C2"))->PutValue(2);
worksheet->GetICells()->GetObjectByIndex(new String("C3"))->PutValue(1);
worksheet->GetICells()->GetObjectByIndex(new String("C4"))->PutValue(4);

// ピボットテーブルを追加する
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// 作成されたピボットテーブルにアクセスする
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// ピボットテーブルの行、列、およびデータフィールドを操作する
pivotTable->AddFieldToArea(PivotFieldType_Row, pivotTable->GetIBaseFields()->GetObjectByIndex(0));
pivotTable->AddFieldToArea(PivotFieldType_Data, pivotTable->GetIBaseFields()->GetObjectByIndex(1));
pivotTable->AddFieldToArea(PivotFieldType_Data, pivotTable->GetIBaseFields()->GetObjectByIndex(2));
pivotTable->AddFieldToArea(PivotFieldType_Column, pivotTable->GetIDataField());

// ピボットテーブルのスタイルを設定する
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// 出力Excelファイルを保存します
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
サンプルコードで作成されたピボットテーブルの画像

サンプルコードによって作成されたピボットテーブルの画像

C++を使用してExcelファイルのピボットテーブルを並べ替える

次の例では、ピボットテーブルの最初の列を降順で並べ替えます。ピボットテーブルでデータを並べ替える手順は次のとおりです。

次のサンプルコードは、C++を使用してExcelファイルのピボットテーブルを並べ替える方法を示しています。

// ソースディレクトリのパス。
StringPtr srcDir = new String("SourceDirectory\\");

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルのパス
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// 出力Excelファイルのパス
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// サンプルのExcelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// 最初のワークシートにアクセスする
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// ピボットテーブルにアクセスする
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// ピボットテーブルの並べ替えを設定する
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// ピボットテーブルのデータを更新して計算します。
pivotTable->RefreshData();
pivotTable->CalculateData();

// 出力Excelファイルを保存します
workbook->Save(outputSortedPivotTable);
サンプルコードによって生成された並べ替えられたピボットテーブルの画像

サンプルコードによって生成された並べ替えられたピボットテーブルの画像

C++を使用してピボットテーブルの行を非表示にする

Aspose.Cells for C++ APIを使用すると、ピボットテーブルの行を非表示にすることもできます。次の例では、「オレンジ」の行ラベルで行を非表示にします。ピボットテーブルの行を非表示にする手順は次のとおりです。

次のサンプルコードは、C++を使用してピボットテーブルの行を非表示にする方法を示しています。

// ソースディレクトリのパス。
StringPtr srcDir = new String("SourceDirectory\\");

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルのパス
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// 出力Excelファイルのパス
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// サンプルのExcelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// 最初のワークシートにアクセスする
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// ピボットテーブルにアクセスする
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// ピボットテーブルの本体範囲を取得する
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// ピボットテーブルの開始行
int currentRow = 5;

// ピボットテーブルの終了行
int rowsUsed = dataBodyRange->GetendRow();

// 行を繰り返し処理し、セルの値を比較して行を非表示にします。
for (int i = currentRow; i < rowsUsed; i++) {
	intrusive_ptr<ICell> cell = worksheet->GetICells()->GetICell(i, 4);
	if (strcmp(cell->GetStringValue()->charValue(), "Orange") == 0) {
		worksheet->GetICells()->HideRow(i);
	}
}

// ピボットテーブルのデータを更新して計算します。
pivotTable->RefreshData();
pivotTable->CalculateData();

// 出力Excelファイルを保存します
workbook->Save(outputHiddenRowPivotTable);
行が非表示のピボットテーブルの画像

行が非表示のピボットテーブルの画像

C++を使用してピボットテーブルデータを操作する

Aspose.Cells for C++ APIを使用して、既存のピボットテーブルのデータを操作することもできます。次の例では、セル「A2」のテキスト「Apple」を「Orange」に置き換え、ピボットテーブルに変更を反映します。ピボットテーブルデータを操作する手順は次のとおりです。

次のサンプルコードは、C++を使用してピボットテーブルのデータを更新する方法を示しています。

// ソースディレクトリのパス。
StringPtr srcDir = new String("SourceDirectory\\");

// 出力ディレクトリパス。
StringPtr outDir = new String("OutputDirectory\\");

// 入力Excelファイルのパス
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// 出力Excelファイルのパス
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// サンプルのExcelファイルをロードします
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// 最初のワークシートにアクセスする
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// ピボットテーブルのソースデータ内にあるセルA2の値を変更します
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// ピボットテーブルにアクセスし、更新して計算します
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// 出力Excelファイルを保存します
workbook->Save(outputManipulatePivotTable);
更新されたデータを示すピボットテーブル

更新されたデータを示すピボットテーブル

無料ライセンスを取得する

評価制限なしでAPIを試すために、無料の一時ライセンスをリクエストできます。

結論

この記事では、C++を使用してExcelファイルのピボットテーブルを操作する方法を学習しました。具体的には、C++を使用して、ピボットテーブルを作成し、ピボットテーブルのデータを並べ替え、非表示にし、更新する方法を学習しました。 Aspose.Cells for C++は、Excelファイルを操作するための多数の追加機能を提供する広大なAPIです。 公式ドキュメントにアクセスすると、APIの詳細を調べることができます。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。

関連項目