Crear archivos de Excel en C++

Anteriormente, escribí una publicación sobre cómo implementar funciones de automatización de Excel y crear archivos XLS/XLSX de Excel desde cero usando C#. Hoy, le mostraré cómo crear libros de trabajo de Excel, insertar datos en hojas de trabajo de Excel, calcular fórmulas y crear gráficos y tablas en hojas de trabajo usando C++. Todas las funciones de automatización de la hoja de cálculo estarán impulsadas por la API de C++ Excel - Aspose.Cells for C++.

Aspose.Cells for C++ es una biblioteca nativa de C++ que le permite crear, leer, analizar y convertir documentos de hojas de cálculo sin necesidad de Microsoft Excel. Proporciona un conjunto completo de funciones de automatización de Excel que se pueden utilizar para generar y manipular hojas de cálculo XLS/XLSX. En este artículo, cubriremos las siguientes características de la creación de archivos Excel XLS/XLSX desde cero.

API de hoja de cálculo de C++ Excel - Instalación

Puede descargar el paquete completo de archivos de biblioteca de Aspose.Cells for C++ desde la sección Descargas. El paquete también contiene una aplicación de consola de muestra lista para ejecutar.

Crear archivos de Excel (XLS/XLSX) usando C++

Primero, creemos un Workbook Excel XLSX simple desde cero. Un Workbook se compone de una o varias hojas de trabajo y cada hoja de trabajo contiene los datos en forma de filas y columnas. Por lo tanto, para crear una hoja de cálculo de Excel, primero debe crear un Workbook y luego agregar hojas de trabajo en él. Los siguientes son los pasos para crear un archivo de Excel usando Aspose.Cells for C++.

El siguiente ejemplo de código muestra cómo crear un archivo XLSX de Excel usando C++.

/*create a new workbook*/
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

/*get the first worksheet*/
intrusive_ptr<IWorksheetCollection> wsc = wb->GetIWorksheets();
intrusive_ptr<IWorksheet> ws = wsc->GetObjectByIndex(0);

/*get cell(0,0)*/
intrusive_ptr<ICells> cells = ws->GetICells();
intrusive_ptr<ICell> cell = cells->GetObjectByIndex(0, 0);

/*write "Hello World" to cell(0,0) of the first sheet*/
intrusive_ptr<String> str = new String("Hello World!");
cell->PutValue(str);

/*save this workbook to resultFile folder*/
wb->Save(resultPath->StringAppend(new String("workbook.xlsx")));

Libro de Excel

La siguiente es la captura de pantalla del libro de Excel que acabamos de crear.

Crear Excel XLSX en C++

Agregar datos a una hoja de cálculo de Excel usando C++

En el ejemplo anterior, hemos visto cómo crear un archivo de Excel simple e insertar valor en una celda en particular usando el índice de fila y columna. Sin embargo, la mayoría de las veces, las celdas de las hojas de cálculo de Excel se identifican con la letra de la columna y los números de fila, como A1, A2, B1, etc. Veamos el ejemplo de cómo insertar datos en la hoja de cálculo con los nombres de las celdas. El proceso solo difiere en agregar valor a la celda y todos los demás pasos para crear el libro de Excel y las hojas de trabajo son los mismos.

El siguiente ejemplo de código muestra cómo crear un libro de Excel XLSX e insertar datos en él mediante C++.

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

//Leer archivo de Excel de entrada
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

//Acceso a la segunda hoja de trabajo en el archivo de Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

//Agregar un valor de cadena a la celda
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue("Hello World");

//Agregar un valor doble a la celda
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(20.5);

//Agregar un valor entero a la celda
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(15);

//Agregar un valor booleano a la celda
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(true);

//Configuración del formato de visualización de la fecha
intrusive_ptr<ICell> cell = worksheet->GetICells()->GetObjectByIndex(new String("A5"));
intrusive_ptr<IStyle> style = cell->GetIStyle();
style->SetNumber(15);
cell->SetIStyle(style);

//Guardar el Workbook
workbook->Save(outputData);

Calcular fórmulas de Workbook usando C++

Establecer fórmulas en libros de Excel es una característica increíble para realizar cálculos en datos. Hace que sea bastante más fácil realizar cálculos complejos en los datos de manera efectiva y eficiente. Los siguientes son los pasos para establecer y calcular fórmulas en hojas de cálculo de Excel.

El siguiente ejemplo de código muestra cómo agregar y calcular fórmulas en un libro de Excel XLSX usando C++.

//Crear un nuevo Workbook
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

//Obtenga la primera hoja de trabajo que se crea de forma predeterminada
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);

//Agregar un valor a la celda "A1"
intrusive_ptr<ICell> cell = ws->GetICells()->GetObjectByIndex(new String("A1"));
cell->PutValue(5);

//Agregar un valor a la celda "A2"
cell = ws->GetICells()->GetObjectByIndex(new String("A2"));
cell->PutValue(15);

//Agregar un valor a la celda "A3"
cell = ws->GetICells()->GetObjectByIndex(new String("A3"));
cell->PutValue(25);

//Agregar fórmula SUM a la celda "A4"
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
cell->SetFormula(new String("=SUM(A1:A3)"));

//Cálculo de los resultados de las fórmulas
wb->CalculateFormula();

//Obtenga el valor calculado de la celda "A4" e imprímalo en la consola
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
StringPtr sCalcuInfo = new String(L"Calculated Value of Cell A4: ");
Console::WriteLine(sCalcuInfo->StringAppend(cell->GetStringValue()));

Crear tablas en una hoja de cálculo de Excel usando C++

Las tablas en las hojas de cálculo de Excel se utilizan para organizar un grupo de datos ubicados en un rango de celdas. Las tablas también lo ayudan a mantener diferentes tipos de listas en las hojas de trabajo. Los siguientes son los pasos para crear una tabla en la hoja de cálculo de Excel.

  • Cree un nuevo libro de Excel usando la clase IWorkbook.
  • Acceda a la hoja de cálculo predeterminada en el objeto IWorksheet o agregue una nueva.
  • Inserte valor/datos en las celdas de la misma manera que lo hemos hecho en el ejemplo anterior.
  • Agregue el rango de celdas a la colección Listas de la hoja de trabajo usando el método IWorksheet->GetIListObjects()->Add().
  • Obtenga la lista en el objeto IListObject.
  • Aplique estilo a la tabla usando el método IListObject->SetTableStyleType().
  • Guarde el Workbook como archivo .xlsx.

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

// Crear una instancia de un objeto Workbook
intrusive_ptr<IWorkbook>  workbook = Factory::CreateIWorkbook();

// Obtener la referencia de la hoja de cálculo predeterminada (primera)
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Obtención de la colección de celdas de Worksheet
intrusive_ptr<ICells> cells = worksheet->GetICells();

// Establecer el valor de las celdas
cells->GetObjectByIndex(new String("A1"))->PutValue("Employee");
cells->GetObjectByIndex(new String("B1"))->PutValue("Quarter");
cells->GetObjectByIndex(new String("C1"))->PutValue("Product");
cells->GetObjectByIndex(new String("D1"))->PutValue("Continent");
cells->GetObjectByIndex(new String("E1"))->PutValue("Country");
cells->GetObjectByIndex(new String("F1"))->PutValue("Sale");

cells->GetObjectByIndex(new String("A2"))->PutValue("David");
cells->GetObjectByIndex(new String("A3"))->PutValue("David");
cells->GetObjectByIndex(new String("A4"))->PutValue("David");
cells->GetObjectByIndex(new String("A5"))->PutValue("David");
cells->GetObjectByIndex(new String("A6"))->PutValue("James"); 

cells->GetObjectByIndex(new String("B2"))->PutValue(1);
cells->GetObjectByIndex(new String("B3"))->PutValue(2);
cells->GetObjectByIndex(new String("B4"))->PutValue(3);
cells->GetObjectByIndex(new String("B5"))->PutValue(4);
cells->GetObjectByIndex(new String("B6"))->PutValue(1); 

cells->GetObjectByIndex(new String("C2"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C3"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C4"))->PutValue("Chai");
cells->GetObjectByIndex(new String("C5"))->PutValue("Maxilaku");
cells->GetObjectByIndex(new String("C6"))->PutValue("Chang"); 

cells->GetObjectByIndex(new String("D2"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D3"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D4"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D5"))->PutValue("Asia");
cells->GetObjectByIndex(new String("D6"))->PutValue("Europe"); 

cells->GetObjectByIndex(new String("E2"))->PutValue("China");
cells->GetObjectByIndex(new String("E3"))->PutValue("India");
cells->GetObjectByIndex(new String("E4"))->PutValue("Korea");
cells->GetObjectByIndex(new String("E5"))->PutValue("India");
cells->GetObjectByIndex(new String("E6"))->PutValue("France"); 

cells->GetObjectByIndex(new String("F2"))->PutValue(2000);
cells->GetObjectByIndex(new String("F3"))->PutValue(500);
cells->GetObjectByIndex(new String("F4"))->PutValue(1200);
cells->GetObjectByIndex(new String("F5"))->PutValue(1500);
cells->GetObjectByIndex(new String("F6"))->PutValue(500);  


// Agregar un nuevo objeto de lista a la hoja de trabajo
worksheet->GetIListObjects()->Add(new String("A1"), new String("F6"), true);
intrusive_ptr<IListObject> listObject = worksheet->GetIListObjects()->GetObjectByIndex(0);

// Agregar estilo predeterminado a la tabla
listObject->SetTableStyleType(TableStyleType_TableStyleMedium10);

// Mostrar totales
listObject->SetShowTotals(true);

// Guardar el archivo de Excel
workbook->Save(resultPath->StringAppend(new String("Excel_Table.xlsx")));

Libro de Excel con tabla

Crear tabla en Excel en C++

Crear gráficos en la hoja de cálculo de Excel usando C++

Los gráficos en las hojas de cálculo de Excel se utilizan para visualizar los datos utilizando diferentes tipos de objetos gráficos. Nos brindan una visión y comprensión rápidas de los datos, especialmente cuando los datos son enormes. Aspose.Cells for C++ admite una variedad de gráficos, incluidos Sunburst, Treemap, Histogram, Pyramid, Bubble, Line y muchos más. Los siguientes son los pasos para crear un gráfico en un libro de Excel usando Aspose.Cells for C++.

  • Cree un nuevo libro de Excel.
  • Acceda a la hoja de trabajo deseada en el objeto IWorksheet.
  • Agregue un nuevo gráfico a la hoja de trabajo usando el método IWorksheet->GetICharts()->Add() pasando el tipo de gráfico.
  • Acceda al gráfico recién agregado en el objeto IChart.
  • Establezca la fuente de datos para el gráfico utilizando el método IChart->GetNISeries()->Add().
  • Guarde el Workbook como archivo .xlsx.

El siguiente ejemplo de código muestra cómo crear un gráfico en un archivo XLSX de Excel usando C++.

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

// Crear un nuevo Workbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Obtenga la primera hoja de trabajo que se crea de forma predeterminada
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Agregar valores de muestra a las celdas
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue(50);
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(100);
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(150);
worksheet->GetICells()->GetObjectByIndex(new String("B1"))->PutValue(4);
worksheet->GetICells()->GetObjectByIndex(new String("B2"))->PutValue(20);
worksheet->GetICells()->GetObjectByIndex(new String("B3"))->PutValue(50);

// Adición de un gráfico a la hoja de cálculo
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Pyramid, 5, 0, 20, 8);

// Acceso a la instancia del gráfico recién agregado
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex);

// Agregar SeriesCollection (fuente de datos del gráfico) al gráfico que va desde la celda "A1" hasta la "B3"
chart->GetNISeries()->Add(new String("A1:B3"), true);

// Guardar el archivo de Excel
workbook->Save(outputChartTypePyramid);

Workbook de Excel con gráfico

Crear gráfico en Excel en C++

Conclusión

En este artículo, hemos cubierto cómo crear hojas de cálculo de MS Excel desde cero usando C++. El artículo también contiene pautas paso a paso y ejemplos de código sobre cómo crear tablas, gráficos y calcular fórmulas en hojas de cálculo de Excel. Puede obtener más información sobre otras funciones avanzadas relacionadas con la automatización de Excel en la documentación de Aspose.Cells for C++.

Artículo relacionado