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.
- Criar arquivos do Excel (XLS/XLSX) usando C++
- Adicionar dados a uma planilha do Excel usando C++
- Calcular fórmulas de pasta de trabalho usando C++
- Criar tabelas em uma planilha do Excel usando C++
- Criar gráficos no Excel XLS/XLSX usando C++
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++.
- Crie um objeto da classe IWorkbook.
- Obtenha a primeira planilha (criada por padrão) da pasta de trabalho em um objeto IWorksheet de IWorksheetCollection.
- Acesse as células da planilha em um objeto ICells usando o método IWorksheet->GetICells().
- Acesse a célula desejada da planilha em um objeto ICell usando o método ICells->GetObjectByIndex() especificando o índice de linha e coluna.
- Adicione valor à célula usando o método ICell->PutValue().
- Salve a pasta de trabalho como arquivo .xlsx usando o método IWorkbook->Save().
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.
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.
- Crie um objeto da classe IWorkbook.
- Obtenha a planilha em um objeto IWorksheet de IWorksheetCollection.
- Use a classe ICell para acessar a célula à qual você deseja aplicar a fórmula.
- Defina a fórmula para a célula usando o método ICell->SetFormula().
- Calcule a fórmula usando o método IWorkbook->CalculateFormula().
- Salve a pasta de trabalho usando o método IWorkbook->Save().
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 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
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++.