As tabelas dinâmicas reorganizam os dados para representá-los de maneira significativa. Eles fornecem diferentes opções de classificação e fornecem somas, médias ou outras estatísticas agrupando os dados. É uma ferramenta essencial para análise de dados e parte fundamental do MS Excel. Você pode se encontrar em cenários em que precisa criar e manipular tabelas dinâmicas programaticamente. Para isso, este artigo ensinará como trabalhar com tabelas dinâmicas em arquivos do Excel usando C++.

API C++ para trabalhar com tabelas dinâmicas em arquivos do Excel

Aspose.Cells for C++ é uma biblioteca nativa de C++ que permite criar, ler e atualizar arquivos do Excel sem exigir a instalação do Microsoft Excel. A API também oferece suporte ao trabalho com tabelas dinâmicas em arquivos do Excel. Você pode instalar a API por meio do NuGet ou baixá-la diretamente da seção Downloads.

PM> Install-Package Aspose.Cells.Cpp

Criar uma tabela dinâmica em um arquivo do Excel usando C++

No exemplo a seguir, criaremos um novo arquivo do Excel, inseriremos dados de amostra nele e criaremos uma tabela dinâmica. O arquivo gerado neste exemplo será usado como arquivo fonte para outros exemplos. A seguir estão as etapas para criar uma tabela dinâmica em um arquivo do Excel.

O código de exemplo a seguir mostra como criar uma tabela dinâmica em um arquivo do Excel usando C++.

// Caminho do diretório de origem.
StringPtr srcDir = new String("SourceDirectory\\");

// Caminho do diretório de saída.
StringPtr outDir = new String("OutputDirectory\\");

// Crie uma instância da classe IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Acesse a primeira planilha
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Adicionar dados de origem para tabela 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);

// Adicionar tabela dinâmica
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Acessar a tabela dinâmica criada
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Manipular linhas, colunas e campos de dados da tabela dinâmica
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());

// Definir o estilo da tabela dinâmica
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Salve o arquivo excel de saída
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Imagem da tabela dinâmica criada pelo código de exemplo

Imagem da tabela dinâmica criada pelo código de exemplo

Classifique a tabela dinâmica em um arquivo do Excel usando C++

No exemplo a seguir, classificaremos a primeira coluna da tabela dinâmica em ordem decrescente. A seguir estão as etapas para classificar dados em uma tabela dinâmica.

O código de exemplo a seguir demonstra como classificar uma tabela dinâmica em um arquivo do Excel usando C++.

// Caminho do diretório de origem.
StringPtr srcDir = new String("SourceDirectory\\");

// Caminho do diretório de saída.
StringPtr outDir = new String("OutputDirectory\\");

// Caminho do arquivo excel de entrada
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

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

// Carregar o arquivo excel de amostra
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Acesse a primeira planilha
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Acesse a tabela dinâmica
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Definir classificação da tabela dinâmica
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Atualize e calcule os dados na tabela dinâmica.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Salve o arquivo excel de saída
workbook->Save(outputSortedPivotTable);
Imagem da tabela dinâmica classificada gerada pelo código de exemplo

Imagem da tabela dinâmica classificada gerada pelo código de exemplo

Ocultar linhas em uma tabela dinâmica usando C++

Com Aspose.Cells para API C++, você também pode ocultar as linhas em uma tabela dinâmica. No exemplo a seguir, ocultaremos a linha com o rótulo de linha “Laranja”. A seguir estão as etapas para ocultar linhas em uma tabela dinâmica.

O código de exemplo a seguir mostra como ocultar linhas em uma tabela dinâmica usando C++.

// Caminho do diretório de origem.
StringPtr srcDir = new String("SourceDirectory\\");

// Caminho do diretório de saída.
StringPtr outDir = new String("OutputDirectory\\");

// Caminho do arquivo excel de entrada
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

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

// Carregar o arquivo excel de amostra
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Acesse a primeira planilha
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Acesse a tabela dinâmica
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Obtenha o intervalo do corpo da tabela dinâmica
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Linha inicial da tabela dinâmica
int currentRow = 5;

// Linha final da tabela dinâmica
int rowsUsed = dataBodyRange->GetendRow();

// Itere pelas linhas, compare o valor da célula e oculte as linhas.
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);
	}
}

// Atualize e calcule os dados na tabela dinâmica.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Salve o arquivo excel de saída
workbook->Save(outputHiddenRowPivotTable);
Imagem da tabela dinâmica com uma linha oculta

Imagem da tabela dinâmica com uma linha oculta

Manipular dados de tabela dinâmica usando C++

Você também pode manipular os dados de uma tabela dinâmica existente usando Aspose.Cells for C++ API. No exemplo a seguir, substituiremos o texto “Apple” na célula “A2” por “Orange” e refletiremos a alteração na tabela dinâmica. A seguir estão as etapas para manipular dados da tabela dinâmica.

O código de exemplo a seguir mostra como atualizar os dados de uma tabela dinâmica usando C++.

// Caminho do diretório de origem.
StringPtr srcDir = new String("SourceDirectory\\");

// Caminho do diretório de saída.
StringPtr outDir = new String("OutputDirectory\\");

// Caminho do arquivo excel de entrada
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

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

// Carregar o arquivo excel de amostra
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Acesse a primeira planilha
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Altere o valor da célula A2 que está dentro dos dados de origem da tabela dinâmica
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Acesse a tabela dinâmica, atualize e calcule
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Salve o arquivo excel de saída
workbook->Save(outputManipulatePivotTable);
Tabela dinâmica mostrando os dados atualizados

Tabela dinâmica mostrando os dados atualizados

Obtenha uma licença gratuita

Para experimentar a API sem limitações de avaliação, você pode solicitar uma licença temporária gratuita.

Conclusão

Neste artigo, você aprendeu a trabalhar com tabelas dinâmicas em arquivos do Excel usando C++. Especificamente, você aprendeu como criar uma tabela dinâmica e classificar, ocultar e atualizar os dados em uma tabela dinâmica usando C++. Aspose.Cells for C++ é uma vasta API que fornece vários recursos adicionais para trabalhar com arquivos do Excel. Você pode explorar a API em detalhes visitando a documentação oficial. Em caso de dúvidas, sinta-se à vontade para entrar em contato conosco em nosso fórum de suporte gratuito.

Veja também