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
- Crear una tabla dinámica en un archivo de Excel usando C++
- Ordenar tabla dinámica en un archivo de Excel usando C++
- Ocultar filas en una tabla dinámica usando C++
- Manipular datos de tablas dinámicas 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.
- En primer lugar, cree una instancia de la clase IWorkbook para representar el nuevo archivo de Excel.
- Acceda a la hoja de trabajo donde desea insertar la tabla dinámica usando el método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Agregue datos de muestra para la tabla dinámica.
- Agregue una tabla dinámica usando IWorksheet->GetIPivotTables()->Add(intrusive\ptrAspose::Cells::Systems::String sourceData, intrusivo\ptrAspose::Cells::Systems::String destCellName, intrusivo\ptrAspose::Cells::Systems::String nombretabla) método.
- Para acceder a la tabla dinámica, utilice el método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Manipule los campos y establezca el estilo de la tabla dinámica.
- Finalmente, guarde el archivo de Excel usando IWorkbook->Save (intrusive\ptrAspose::Cells::Systems::String nombre de archivo) método.
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")));
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.
- En primer lugar, cargue el archivo de muestra de Excel utilizando la clase IWorkbook.
- Recupere la hoja de trabajo que contiene la tabla dinámica usando el método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Acceda a la tabla dinámica usando el método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Obtenga el campo de fila y ordene la tabla dinámica usando los métodos IPivotField->SetAutoSort(bool value) y IPivotField->SetAscendSort(bool value).
- Actualice el contenido de la tabla dinámica y calcule los datos utilizando los métodos IPivotTable->RefreshData() y IPivotTable->CalculateData() respectivamente.
- Finalmente, guarde el archivo de Excel usando IWorkbook->Save (intrusive\ptrAspose::Cells::Systems::String nombre de archivo) método.
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);
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.
- En primer lugar, cargue el archivo de muestra de Excel utilizando la clase IWorkbook.
- Recupere la hoja de trabajo que contiene la tabla dinámica usando el método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Acceda a la tabla dinámica usando el método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Obtenga el rango del cuerpo de datos de la tabla dinámica usando el método IPivotTable->GetIDataBodyRange().
- Recorra las filas de la tabla dinámica y oculte las filas que cumplan con sus criterios.
- Actualice el contenido de la tabla dinámica y calcule los datos utilizando los métodos IPivotTable->RefreshData() y IPivotTable->CalculateData() respectivamente.
- Finalmente, guarde el archivo de Excel usando IWorkbook->Save (intrusive\ptrAspose::Cells::Systems::String nombre de archivo) método.
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);
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.
- En primer lugar, cargue el archivo de muestra de Excel utilizando la clase IWorkbook.
- Recupere la hoja de cálculo que contiene los datos de la tabla dinámica mediante el método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Actualice los datos de la tabla dinámica según sus requisitos.
- Para acceder a la tabla dinámica, utilice el método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Actualice el contenido de la tabla dinámica y calcule los datos utilizando los métodos IPivotTable->RefreshData() y IPivotTable->CalculateData() respectivamente.
- Finalmente, guarde el archivo de Excel usando IWorkbook->Save (intrusive\ptrAspose::Cells::Systems::String nombre de archivo) método.
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);
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.