Las tablas dinámicas reorganizan los datos para representarlos de manera significativa. Proporcionan diferentes opciones de clasificación y proporcionan sumas, promedios u otras estadísticas al agrupar los datos. Es una herramienta esencial para el análisis de datos y es una parte fundamental de MS Excel. Es posible que se encuentre en escenarios en los que necesite crear y manipular tablas dinámicas mediante programación. Con ese fin, este artículo le enseñará cómo trabajar con tablas dinámicas en archivos de Excel usando C++.

API de C++ para trabajar con tablas dinámicas en archivos de Excel

Aspose.Cells for C++ es una biblioteca nativa de C++ que le permite crear, leer y actualizar archivos de Excel sin necesidad de instalar Microsoft Excel. La API también admite trabajar con tablas dinámicas en archivos de Excel. Puede instalar la API a través de NuGet o descargarla directamente desde la sección Descargas.

PM> Install-Package Aspose.Cells.Cpp

Crear una tabla dinámica en un archivo de Excel usando C++

En el siguiente ejemplo, crearemos un nuevo archivo de Excel, insertaremos datos de muestra en él y crearemos una tabla dinámica. El archivo generado en este ejemplo se usará como archivo fuente para otros ejemplos. Los siguientes son los pasos para crear una tabla dinámica en un archivo de Excel.

El siguiente código de ejemplo muestra cómo crear una tabla dinámica en un archivo de Excel usando C++.

// Ruta del directorio de origen.
StringPtr srcDir = new String("SourceDirectory\\");

// Ruta del directorio de salida.
StringPtr outDir = new String("OutputDirectory\\");

// Crear una instancia de la clase IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Accede a la primera hoja de trabajo
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Agregar datos de origen para la tabla dinámica
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);

// Agregar tabla dinámica
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Acceder a la tabla dinámica creada
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Manipular filas, columnas y campos de datos de tablas dinámicas
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());

// Establecer el estilo de la tabla dinámica
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Guarde el archivo de Excel de salida
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Imagen de la tabla dinámica creada por el código de muestra

Imagen de la tabla dinámica creada por el código de muestra

Ordenar tabla dinámica en un archivo de Excel usando C++

En el siguiente ejemplo, ordenaremos la primera columna de la tabla dinámica en orden descendente. Los siguientes son los pasos para ordenar los datos en una tabla dinámica.

El siguiente código de ejemplo demuestra cómo ordenar una tabla dinámica en un archivo de Excel usando C++.

// Ruta del directorio de origen.
StringPtr srcDir = new String("SourceDirectory\\");

// Ruta del directorio de salida.
StringPtr outDir = new String("OutputDirectory\\");

// Ruta del archivo de Excel de entrada
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Ruta del archivo de salida de Excel
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// Cargue el archivo de muestra de Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accede a la primera hoja de trabajo
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Acceder a la tabla dinámica
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Establecer la clasificación de la tabla dinámica
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Actualice y calcule los datos en la tabla dinámica.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Guarde el archivo de Excel de salida
workbook->Save(outputSortedPivotTable);
Imagen de la tabla dinámica ordenada generada por el código de muestra

Imagen de la tabla dinámica ordenada generada por el código de muestra

Ocultar filas en una tabla dinámica usando C++

Con Aspose.Cells for C++ API, también puede ocultar las filas en una tabla dinámica. En el siguiente ejemplo, ocultaremos la fila con la etiqueta de fila “Naranja”. Los siguientes son los pasos para ocultar filas en una tabla dinámica.

El siguiente código de ejemplo muestra cómo ocultar filas en una tabla dinámica usando C++.

// Ruta del directorio de origen.
StringPtr srcDir = new String("SourceDirectory\\");

// Ruta del directorio de salida.
StringPtr outDir = new String("OutputDirectory\\");

// Ruta del archivo de Excel de entrada
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Ruta del archivo de salida de Excel
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// Cargue el archivo de muestra de Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accede a la primera hoja de trabajo
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Acceder a la tabla dinámica
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Obtener rango de cuerpo de mesa pivotante
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Fila inicial de la tabla dinámica
int currentRow = 5;

// Fila final de la tabla dinámica
int rowsUsed = dataBodyRange->GetendRow();

// Repita las filas, compare el valor de la celda y oculte las filas.
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);
	}
}

// Actualice y calcule los datos en la tabla dinámica.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Guarde el archivo de Excel de salida
workbook->Save(outputHiddenRowPivotTable);
Imagen de la tabla dinámica con una fila oculta

Imagen de la tabla dinámica con una fila oculta

Manipular datos de tablas dinámicas usando C++

También puede manipular los datos de una tabla dinámica existente utilizando Aspose.Cells for C++. En el siguiente ejemplo, reemplazaremos el texto “Apple” en la celda “A2” con “Orange” y reflejaremos el cambio en la tabla dinámica. Los siguientes son los pasos para manipular los datos de la tabla dinámica.

El siguiente código de ejemplo muestra cómo actualizar los datos de una tabla dinámica mediante C++.

// Ruta del directorio de origen.
StringPtr srcDir = new String("SourceDirectory\\");

// Ruta del directorio de salida.
StringPtr outDir = new String("OutputDirectory\\");

// Ruta del archivo de Excel de entrada
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Ruta del archivo de salida de Excel
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// Cargue el archivo de muestra de Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accede a la primera hoja de trabajo
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Cambie el valor de la celda A2 que está dentro de los datos de origen de la tabla dinámica
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Acceda a la tabla dinámica, actualice y calcule
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Guarde el archivo de Excel de salida
workbook->Save(outputManipulatePivotTable);
Tabla dinámica que muestra los datos actualizados

Tabla dinámica que muestra los datos actualizados

Obtenga una licencia gratis

Para probar la API sin limitaciones de evaluación, puede solicitar una licencia temporal gratuita.

Conclusión

En este artículo, ha aprendido a trabajar con tablas dinámicas en archivos de Excel utilizando C++. Específicamente, aprendió cómo crear una tabla dinámica y ordenar, ocultar y actualizar los datos en una tabla dinámica usando C++. Aspose.Cells for C++ es una gran API que proporciona un montón de características adicionales para trabajar con archivos de Excel. Puede explorar la API en detalle visitando la documentación oficial. Si tiene alguna pregunta, no dude en comunicarse con nosotros en nuestro foro de soporte gratuito.

Ver también