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
- Criar uma tabela dinâmica em um arquivo do Excel usando C++
- Classifique a tabela dinâmica em um arquivo do Excel usando C++
- Ocultar linhas em uma tabela dinâmica usando C++
- Manipular dados de tabela dinâmica 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.
- Primeiramente, crie uma instância da classe IWorkbook para representar o novo arquivo Excel.
- Acesse a planilha onde deseja inserir a tabela dinâmica usando o método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Adicione dados de amostra para a tabela dinâmica.
- Adicione a tabela dinâmica usando o IWorksheet->GetIPivotTables()->Add(intrusiveptrAspose::Cells::Systems::String sourceData, intrusiveptrAspose::Cells::Systems::String destCellName, intrusiveptrAspose::Cells::Systems::String tableName) método.
- Para acessar a tabela dinâmica, use o método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Manipule os campos e defina o estilo da tabela dinâmica.
- Finalmente, salve o arquivo Excel usando o IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) método.
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
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.
- Em primeiro lugar, carregue o arquivo Excel de amostra usando a classe IWorkbook.
- Recupere a planilha que contém a tabela dinâmica usando o método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Acesse a tabela dinâmica usando o método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Obtenha o campo de linha e classifique a tabela dinâmica usando os métodos IPivotField->SetAutoSort(bool value) e IPivotField->SetAscendSort(bool value).
- Atualize o conteúdo da tabela dinâmica e calcule os dados usando os métodos IPivotTable->RefreshData() e IPivotTable->CalculateData(), respectivamente.
- Finalmente, salve o arquivo Excel usando o IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) método.
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
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.
- Em primeiro lugar, carregue o arquivo Excel de amostra usando a classe IWorkbook.
- Recupere a planilha que contém a tabela dinâmica usando o método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Acesse a tabela dinâmica usando o método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Obtenha o intervalo do corpo de dados da tabela dinâmica usando o método IPivotTable->GetIDataBodyRange().
- Itere pelas linhas da tabela dinâmica e oculte as linhas que atendem aos seus critérios.
- Atualize o conteúdo da tabela dinâmica e calcule os dados usando os métodos IPivotTable->RefreshData() e IPivotTable->CalculateData(), respectivamente.
- Finalmente, salve o arquivo Excel usando o IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) método.
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
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.
- Em primeiro lugar, carregue o arquivo Excel de amostra usando a classe IWorkbook.
- Recupere a planilha que contém os dados da tabela dinâmica usando o método IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Atualize os dados da tabela dinâmica de acordo com seus requisitos.
- Para acessar a tabela dinâmica, use o método IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Atualize o conteúdo da tabela dinâmica e calcule os dados usando os métodos IPivotTable->RefreshData() e IPivotTable->CalculateData(), respectivamente.
- Finalmente, salve o arquivo Excel usando o IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String fileName) método.
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
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.