数据透视表重新排列数据以有意义的方式表示它。它们提供不同的排序选项,并通过将数据分组在一起来提供总和、平均值或其他统计信息。它是数据分析的重要工具,是 MS Excel 的基本组成部分。您可能会发现自己需要以编程方式创建和操作数据透视表。为此,本文将教您如何使用 C++ 处理 Excel 文件中的数据透视表。

用于在 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 文件中创建数据透视表的步骤。

以下示例代码展示了如何使用 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++ 是一个庞大的 API,它提供了一系列用于处理 Excel 文件的附加功能。您可以通过访问 官方文档 来详细探索 API。如有任何问题,请随时通过我们的 免费支持论坛 与我们联系。

也可以看看