数据透视表重新排列数据以有意义的方式表示它。它们提供不同的排序选项,并通过将数据分组在一起来提供总和、平均值或其他统计信息。它是数据分析的重要工具,是 MS Excel 的基本组成部分。您可能会发现自己需要以编程方式创建和操作数据透视表。为此,本文将教您如何使用 C++ 处理 Excel 文件中的数据透视表。
- 用于在 Excel 文件中处理数据透视表的 C++ API
- 使用 C++ 在 Excel 文件中创建数据透视表
- 使用 C++ 对 Excel 文件中的数据透视表进行排序
- 使用 C++ 隐藏数据透视表中的行
- 使用 C++ 操作数据透视表数据
用于在 Excel 文件中处理数据透视表的 C++ API
Aspose.Cells for C++ 是一个原生 C++ 库,允许您创建、读取和更新 Excel 文件,而无需安装 Microsoft Excel。 API 还支持在 Excel 文件中使用数据透视表。您可以通过 NuGet 安装 API,也可以直接从 下载 部分下载。
PM> Install-Package Aspose.Cells.Cpp
使用 C++ 在 Excel 文件中创建数据透视表
在下面的示例中,我们将创建一个新的 Excel 文件,将示例数据插入其中并创建一个数据透视表。本示例中生成的文件将用作其他示例的源文件。以下是在 Excel 文件中创建数据透视表的步骤。
- 首先,创建一个 IWorkbook 类的实例来表示新的 Excel 文件。
- 使用 IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index) 方法访问要在其中插入数据透视表的工作表。
- 为数据透视表添加示例数据。
- 使用 IWorksheet->GetIPivotTables()->Add(intrusiveptrAspose::Cells::Systems::String源数据,侵入式Aspose::Cells::Systems::StringdestCellName, intrusiveptrAspose::Cells::Systems::String表名) 方法。
- 要访问数据透视表,请使用 IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index) 方法。
- 操作字段并设置数据透视表的样式。
- 最后,使用 IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String文件名) 方法。
以下示例代码展示了如何使用 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 (intrusiveptrAspose::Cells::Systems::String文件名) 方法。
以下示例代码演示了如何使用 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 (intrusiveptrAspose::Cells::Systems::String文件名) 方法。
以下示例代码显示了如何使用 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 (intrusiveptrAspose::Cells::Systems::String文件名) 方法。
以下示例代码展示了如何使用 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++ 是一个庞大的 API,它提供了一系列用于处理 Excel 文件的附加功能。您可以通过访问 官方文档 来详细探索 API。如有任何问题,请随时通过我们的 免费支持论坛 与我们联系。