ピボットテーブルは、データを意味のある方法で表すためにデータを再配置します。これらはさまざまな並べ替えオプションを提供し、データをグループ化することで合計、平均、またはその他の統計を提供します。これはデータ分析に不可欠なツールであり、MSExcelの基本的な部分です。プログラムでピボットテーブルを作成および操作する必要があるシナリオに遭遇する可能性があります。そのために、この記事では、C++を使用してExcelファイルのピボットテーブルを操作する方法を説明します。
- Excelファイルでピボットテーブルを操作するためのC++API
- C++を使用してExcelファイルにピボットテーブルを作成する
- C++を使用してExcelファイルのピボットテーブルを並べ替える
- C++を使用してピボットテーブルの行を非表示にする
- C++を使用してピボットテーブルデータを操作する
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ファイルにピボットテーブルを作成する手順です。
- まず、IWorkbookクラスのインスタンスを作成して、新しいExcelファイルを表します。
- IWorkbook->GetIWorksheets()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用して、ピボットテーブルを挿入するワークシートにアクセスします。
- ピボットテーブルのサンプルデータを追加します。
- IWorksheet->GetIPivotTables()->Add(intrusive_ptrAspose::Cells::Systems::String sourceData、intrusive_ptrAspose::Cells::Systems::String destCellName、intrusive_ptrAspose::Cells::Systems::String tableName)メソッド。
- ピボットテーブルにアクセスするには、IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用します。
- フィールドを操作し、ピボットテーブルのスタイルを設定します。
- 最後に、IWorkbook->Save(intrusive_ptrAspose::Cells::Systems::String fileName)メソッド。
次のサンプルコードは、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ファイルのピボットテーブルを並べ替える
次の例では、ピボットテーブルの最初の列を降順で並べ替えます。ピボットテーブルでデータを並べ替える手順は次のとおりです。
- まず、IWorkbookクラスを使用してサンプルExcelファイルをロードします。
- IWorkbook->GetIWorksheets()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用して、ピボットテーブルを含むワークシートを取得します。
- IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用してピボットテーブルにアクセスします。
- 行フィールドを取得し、IPivotField->SetAutoSort(bool value)およびIPivotField->SetAscendSort(bool value)メソッドを使用してピボットテーブルを並べ替えます。
- ピボットテーブルの内容を更新し、IPivotTable->RefreshData()メソッドとIPivotTable->CalculateData()メソッドをそれぞれ使用してデータを計算します。
- 最後に、IWorkbook->Save(intrusive_ptrAspose::Cells::Systems::String fileName)メソッド。
次のサンプルコードは、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を使用すると、ピボットテーブルの行を非表示にすることもできます。次の例では、「オレンジ」の行ラベルで行を非表示にします。ピボットテーブルの行を非表示にする手順は次のとおりです。
- まず、IWorkbookクラスを使用してサンプルExcelファイルをロードします。
- IWorkbook->GetIWorksheets()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用して、ピボットテーブルを含むワークシートを取得します。
- IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用してピボットテーブルにアクセスします。
- IPivotTable->GetIDataBodyRange()メソッドを使用して、ピボットテーブルのデータ本体の範囲を取得します。
- ピボットテーブルの行を繰り返し処理し、基準を満たす行を非表示にします。
- ピボットテーブルの内容を更新し、IPivotTable->RefreshData()メソッドとIPivotTable->CalculateData()メソッドをそれぞれ使用してデータを計算します。
- 最後に、IWorkbook->Save(intrusive_ptrAspose::Cells::Systems::String fileName)メソッド。
次のサンプルコードは、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」に置き換え、ピボットテーブルに変更を反映します。ピボットテーブルデータを操作する手順は次のとおりです。
- まず、IWorkbookクラスを使用してサンプルExcelファイルをロードします。
- IWorkbook->GetIWorksheets()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用して、ピボットテーブルデータを含むワークシートを取得します。
- 要件に応じて、ピボットテーブルのデータを更新します。
- ピボットテーブルにアクセスするには、IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index)メソッドを使用します。
- ピボットテーブルの内容を更新し、IPivotTable->RefreshData()メソッドとIPivotTable->CalculateData()メソッドをそれぞれ使用してデータを計算します。
- 最後に、IWorkbook->Save(intrusive_ptrAspose::Cells::Systems::String fileName)メソッド。
次のサンプルコードは、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の詳細を調べることができます。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。