Criar arquivos do Excel em C++

Anteriormente, escrevi um post sobre como implementar recursos de automação do Excel e criar arquivos Excel XLS/XLSX do zero usando C#. Hoje, mostrarei como criar pastas de trabalho do Excel, inserir dados em planilhas do Excel, calcular fórmulas e criar gráficos e tabelas em planilhas usando C++. Todos os recursos de automação de planilhas serão alimentados por C++ Excel API - Aspose.Cells for C++.

Aspose.Cells for C++ é uma biblioteca nativa de C++ que permite criar, ler, analisar e converter documentos de planilha sem a necessidade do Microsoft Excel. Ele fornece um conjunto completo de recursos de automação do Excel que podem ser utilizados para gerar e manipular planilhas XLS/XLSX. Neste artigo, abordaremos os seguintes recursos de criação de arquivos Excel XLS/XLSX a partir do zero.

C++ Excel Spreadsheet API - Instalação

Você pode baixar o pacote completo de arquivos de biblioteca do Aspose.Cells para C++ na seção Downloads. O pacote também contém um aplicativo de console de amostra pronto para execução.

Criar arquivos do Excel (XLS/XLSX) usando C++

Vamos primeiro criar uma pasta de trabalho simples do Excel XLSX do zero. Uma pasta de trabalho é composta por uma ou várias planilhas e cada planilha contém os dados na forma de linhas e colunas. Portanto, para criar uma planilha do Excel, você precisa primeiro criar uma pasta de trabalho e depois adicionar planilhas nela. A seguir estão as etapas para criar um arquivo do Excel usando Aspose.Cells para C++.

O exemplo de código a seguir mostra como criar um arquivo XLSX do 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")));

Pasta de trabalho do Excel

A seguir está a captura de tela da pasta de trabalho do Excel que acabamos de criar.

Criar Excel XLSX em C++

Adicionar dados a uma planilha do Excel usando C++

No exemplo anterior, vimos como criar um arquivo Excel simples e inserir valor em uma célula específica usando o índice de linha e coluna. No entanto, na maioria das vezes as células nas planilhas do Excel são identificadas usando a letra da coluna e os números das linhas, como A1, A2, B1 e etc. Então, vejamos o exemplo de como inserir dados na planilha usando os nomes das células. O processo difere apenas em agregar valor à célula e todas as outras etapas de criação da pasta de trabalho e planilhas do Excel são as mesmas.

O exemplo de código a seguir mostra como criar uma pasta de trabalho XLSX do Excel e inserir dados nela usando C++.

//Caminho do arquivo excel de saída
StringPtr outputData = resultPath->StringAppend(new String("outputData.xlsx"));

//Ler arquivo excel de entrada
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

//Acessando a segunda planilha no arquivo Excel
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

//Adicionando um valor de string à célula
worksheet->GetICells()->GetObjectByIndex(new String("A1"))->PutValue("Hello World");

//Adicionando um valor duplo à célula
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(20.5);

//Adicionando um valor inteiro à célula
worksheet->GetICells()->GetObjectByIndex(new String("A3"))->PutValue(15);

//Adicionando um valor booleano à célula
worksheet->GetICells()->GetObjectByIndex(new String("A4"))->PutValue(true);

//Configurando o formato de exibição da data
intrusive_ptr<ICell> cell = worksheet->GetICells()->GetObjectByIndex(new String("A5"));
intrusive_ptr<IStyle> style = cell->GetIStyle();
style->SetNumber(15);
cell->SetIStyle(style);

//Salve a pasta de trabalho
workbook->Save(outputData);

Calcular fórmulas de pasta de trabalho usando C++

Definir fórmulas em pastas de trabalho do Excel é um recurso incrível para realizar cálculos em dados. Isso torna muito mais fácil realizar cálculos complexos nos dados de forma eficaz e eficiente. A seguir estão as etapas para definir e calcular fórmulas em planilhas do Excel.

O exemplo de código a seguir mostra como adicionar e calcular fórmulas em uma pasta de trabalho do Excel XLSX usando C++.

//Criar uma nova pasta de trabalho
intrusive_ptr<IWorkbook> wb = Factory::CreateIWorkbook();

//Obtenha a primeira planilha que é criada por padrão
intrusive_ptr<IWorksheet> ws = wb->GetIWorksheets()->GetObjectByIndex(0);

//Adicionando um valor à célula "A1"
intrusive_ptr<ICell> cell = ws->GetICells()->GetObjectByIndex(new String("A1"));
cell->PutValue(5);

//Adicionando um valor à célula "A2"
cell = ws->GetICells()->GetObjectByIndex(new String("A2"));
cell->PutValue(15);

//Adicionando um valor à célula "A3"
cell = ws->GetICells()->GetObjectByIndex(new String("A3"));
cell->PutValue(25);

//Adicionando a fórmula SOMA à célula "A4"
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
cell->SetFormula(new String("=SUM(A1:A3)"));

//Calculando os resultados das fórmulas
wb->CalculateFormula();

//Obtenha o valor calculado da célula "A4" e imprima no console
cell = ws->GetICells()->GetObjectByIndex(new String("A4"));
StringPtr sCalcuInfo = new String(L"Calculated Value of Cell A4: ");
Console::WriteLine(sCalcuInfo->StringAppend(cell->GetStringValue()));

Criar tabelas em uma planilha do Excel usando C++

As tabelas nas planilhas do Excel são usadas para organizar um grupo de dados localizado em um intervalo de células. As tabelas também ajudam a manter diferentes tipos de listas nas planilhas. A seguir estão as etapas para criar uma tabela na planilha do Excel.

  • Crie uma nova pasta de trabalho do Excel usando a classe IWorkbook.
  • Acesse a planilha padrão no objeto IWorksheet ou adicione uma nova.
  • Insira valor/dados nas células da mesma forma que fizemos no exemplo anterior.
  • Adicione o intervalo de células à coleção Lists da planilha usando o método IWorksheet->GetIListObjects()->Add().
  • Obtenha a lista no objeto IListObject.
  • Aplique o estilo à tabela usando o método IListObject->SetTableStyleType().
  • Salve a pasta de trabalho como arquivo .xlsx.

O exemplo de código a seguir mostra como criar uma tabela no arquivo XLSX do Excel usando C++.

// Instanciar um objeto Workbook
intrusive_ptr<IWorkbook>  workbook = Factory::CreateIWorkbook();

// Obtendo a referência da planilha padrão (primeira)
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Obtendo a coleção de células da planilha
intrusive_ptr<ICells> cells = worksheet->GetICells();

// Configurando o valor para as células
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);  


// Adicionando um novo objeto de lista à planilha
worksheet->GetIListObjects()->Add(new String("A1"), new String("F6"), true);
intrusive_ptr<IListObject> listObject = worksheet->GetIListObjects()->GetObjectByIndex(0);

// Adicionando estilo padrão à tabela
listObject->SetTableStyleType(TableStyleType_TableStyleMedium10);

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

// Salvando o arquivo Excel
workbook->Save(resultPath->StringAppend(new String("Excel_Table.xlsx")));

Pasta de trabalho do Excel com tabela

Criar tabela no Excel em C++

Criar gráficos na planilha do Excel usando C++

Gráficos em planilhas do Excel são usados para visualizar os dados usando diferentes tipos de objetos gráficos. Eles nos dão uma visão rápida e compreensão dos dados, especialmente quando os dados são enormes. Aspose.Cells para C++ suporta uma variedade de gráficos, incluindo Sunburst, Treemap, Histogram, Pyramid, Bubble, Line e muitos mais. A seguir estão as etapas para criar um gráfico na pasta de trabalho do Excel usando Aspose.Cells para C++.

  • Crie uma nova pasta de trabalho do Excel.
  • Acesse a planilha desejada no objeto IWorksheet.
  • Adicione um novo gráfico à planilha usando o método IWorksheet->GetICharts()->Add() passando o tipo do gráfico.
  • Acesse o gráfico recém-adicionado no objeto IChart.
  • Defina a fonte de dados para o gráfico usando o método IChart->GetNISeries()->Add().
  • Salve a pasta de trabalho como arquivo .xlsx.

O exemplo de código a seguir mostra como criar um gráfico no arquivo XLSX do Excel usando C++.

// Caminho do arquivo excel de saída
StringPtr outputChartTypePyramid = resultPath->StringAppend(new String("Exce_Pyramid_Chart.xlsx"));

// Criar uma nova pasta de trabalho
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Obtenha a primeira planilha que é criada por padrão
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Adicionando valores de amostra às células
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);

// Adicionando um gráfico à planilha
int chartIndex = worksheet->GetICharts()->Add(Aspose::Cells::Charts::ChartType::ChartType_Pyramid, 5, 0, 20, 8);

// Acessando a instância do gráfico recém-adicionado
intrusive_ptr<Aspose::Cells::Charts::IChart> chart = worksheet->GetICharts()->GetObjectByIndex(chartIndex);

// Adicionando SeriesCollection (fonte de dados do gráfico) ao gráfico variando da célula "A1" a "B3"
chart->GetNISeries()->Add(new String("A1:B3"), true);

// Salvando o arquivo Excel
workbook->Save(outputChartTypePyramid);

Pasta de trabalho do Excel com gráfico

Criar gráfico no Excel em C++

Conclusão

Neste artigo, abordamos como criar planilhas do MS Excel do zero usando C++. O artigo também contém diretrizes passo a passo e exemplos de código sobre como criar tabelas, gráficos e calcular fórmulas em planilhas do Excel. Você pode aprender mais sobre outros recursos avançados relacionados à automação do Excel na documentação do Aspose.Cells for C++.

Artigo relacionado