Les tableaux croisés dynamiques réorganisent les données pour les représenter de manière significative. Ils offrent différentes options de tri et fournissent des sommes, des moyennes ou d’autres statistiques en regroupant les données. C’est un outil essentiel pour l’analyse des données et un élément fondamental de MS Excel. Vous pouvez vous retrouver dans des scénarios où vous devez créer et manipuler des tableaux croisés dynamiques par programmation. À cette fin, cet article vous apprendra à utiliser des tableaux croisés dynamiques dans des fichiers Excel à l’aide de C++.

API C++ pour travailler avec des tableaux croisés dynamiques dans des fichiers Excel

Aspose.Cells for C++ est une bibliothèque C++ native qui vous permet de créer, lire et mettre à jour des fichiers Excel sans nécessiter l’installation de Microsoft Excel. L’API prend également en charge l’utilisation de tableaux croisés dynamiques dans des fichiers Excel. Vous pouvez soit installer l’API via NuGet ou la télécharger directement à partir de la section Téléchargements.

PM> Install-Package Aspose.Cells.Cpp

Créer un tableau croisé dynamique dans un fichier Excel à l’aide de C++

Dans l’exemple suivant, nous allons créer un nouveau fichier Excel, y insérer des exemples de données et créer un tableau croisé dynamique. Le fichier généré dans cet exemple sera utilisé comme fichier source pour d’autres exemples. Voici les étapes pour créer un tableau croisé dynamique dans un fichier Excel.

L’exemple de code suivant montre comment créer un tableau croisé dynamique dans un fichier Excel à l’aide de C++.

// Chemin du répertoire source.
StringPtr srcDir = new String("SourceDirectory\\");

// Chemin du répertoire de sortie.
StringPtr outDir = new String("OutputDirectory\\");

// Créer une instance de la classe IWorkbook
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook();

// Accéder à la première feuille de calcul
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Ajouter des données source pour le tableau croisé dynamique
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);

// Ajouter un tableau croisé dynamique
int idx = worksheet->GetIPivotTables()->Add(new String("A1:C4"), new String("E5"), new String("MyPivotTable"));

// Accéder au tableau croisé dynamique créé
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(idx);

// Manipuler les lignes, les colonnes et les champs de données du tableau croisé dynamique
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());

// Définir le style du tableau croisé dynamique
pivotTable->SetPivotTableStyleType(PivotTableStyleType_PivotTableStyleMedium9);

// Enregistrez le fichier Excel de sortie
workbook->Save(outDir->StringAppend(new String("outputCreatePivotTable.xlsx")));
Image du tableau croisé dynamique créé par l'exemple de code

Image du tableau croisé dynamique créé par l’exemple de code

Trier le tableau croisé dynamique dans un fichier Excel à l’aide de C++

Dans l’exemple suivant, nous allons trier la première colonne du tableau croisé dynamique par ordre décroissant. Voici les étapes pour trier les données dans un tableau croisé dynamique.

L’exemple de code suivant montre comment trier un tableau croisé dynamique dans un fichier Excel à l’aide de C++.

// Chemin du répertoire source.
StringPtr srcDir = new String("SourceDirectory\\");

// Chemin du répertoire de sortie.
StringPtr outDir = new String("OutputDirectory\\");

// Chemin du fichier excel d'entrée
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Chemin du fichier excel de sortie
StringPtr outputSortedPivotTable = outDir->StringAppend(new String("outputSortedPivotTable.xlsx"));

// Charger l'exemple de fichier Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accéder à la première feuille de calcul
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Accéder au tableau croisé dynamique
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Définir le tri du tableau croisé dynamique
pivotTable->AddFieldToArea(PivotFieldType_Row, 0);
intrusive_ptr<IPivotField> pivotField = pivotTable->GetIRowFields()->GetObjectByIndex(0);
pivotField->SetAutoSort(true);
pivotField->SetAscendSort(false);

// Actualisez et calculez les données dans le tableau croisé dynamique.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Enregistrez le fichier Excel de sortie
workbook->Save(outputSortedPivotTable);
Image du tableau croisé dynamique trié généré par l'exemple de code

Image du tableau croisé dynamique trié généré par l’exemple de code

Masquer des lignes dans un tableau croisé dynamique à l’aide de C++

Avec Aspose.Cells for C++, vous pouvez également masquer les lignes dans un tableau croisé dynamique. Dans l’exemple suivant, nous allons masquer la ligne avec l’étiquette de ligne “Orange”. Voici les étapes pour masquer des lignes dans un tableau croisé dynamique.

L’exemple de code suivant montre comment masquer des lignes dans un tableau croisé dynamique à l’aide de C++.

// Chemin du répertoire source.
StringPtr srcDir = new String("SourceDirectory\\");

// Chemin du répertoire de sortie.
StringPtr outDir = new String("OutputDirectory\\");

// Chemin du fichier excel d'entrée
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Chemin du fichier excel de sortie
StringPtr outputHiddenRowPivotTable = outDir->StringAppend(new String("outputHiddenRowPivotTable.xlsx"));

// Charger l'exemple de fichier Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accéder à la première feuille de calcul
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Accéder au tableau croisé dynamique
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);

// Obtenir la plage de corps du tableau croisé dynamique
intrusive_ptr<ICellArea> dataBodyRange = pivotTable->GetIDataBodyRange();

// Ligne de départ du tableau croisé dynamique
int currentRow = 5;

// Ligne de fin du tableau croisé dynamique
int rowsUsed = dataBodyRange->GetendRow();

// Parcourez les lignes, comparez la valeur de la cellule et masquez les lignes.
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);
	}
}

// Actualisez et calculez les données dans le tableau croisé dynamique.
pivotTable->RefreshData();
pivotTable->CalculateData();

// Enregistrez le fichier Excel de sortie
workbook->Save(outputHiddenRowPivotTable);
Image du tableau croisé dynamique avec une ligne masquée

Image du tableau croisé dynamique avec une ligne masquée

Manipuler les données d’un tableau croisé dynamique à l’aide de C++

Vous pouvez également manipuler les données d’un tableau croisé dynamique existant à l’aide de l’API Aspose.Cells for C++. Dans l’exemple suivant, nous allons remplacer le texte “Apple” dans la cellule “A2” par “Orange” et refléter le changement dans le tableau croisé dynamique. Voici les étapes pour manipuler les données du tableau croisé dynamique.

L’exemple de code suivant montre comment mettre à jour les données d’un tableau croisé dynamique à l’aide de C++.

// Chemin du répertoire source.
StringPtr srcDir = new String("SourceDirectory\\");

// Chemin du répertoire de sortie.
StringPtr outDir = new String("OutputDirectory\\");

// Chemin du fichier excel d'entrée
StringPtr samplePivotTable = srcDir->StringAppend(new String("SamplePivotTable.xlsx"));

// Chemin du fichier excel de sortie
StringPtr outputManipulatePivotTable = outDir->StringAppend(new String("outputManipulatePivotTable.xlsx"));

// Charger l'exemple de fichier Excel
intrusive_ptr<IWorkbook> workbook = Factory::CreateIWorkbook(samplePivotTable);

// Accéder à la première feuille de calcul
intrusive_ptr<IWorksheet> worksheet = workbook->GetIWorksheets()->GetObjectByIndex(0);

// Modifier la valeur de la cellule A2 qui se trouve dans les données source du tableau croisé dynamique
intrusive_ptr<String> str = new String("Orange");
worksheet->GetICells()->GetObjectByIndex(new String("A2"))->PutValue(str);

// Accéder au tableau croisé dynamique, l'actualiser et le calculer
intrusive_ptr<IPivotTable> pivotTable = worksheet->GetIPivotTables()->GetObjectByIndex(0);
pivotTable->RefreshData();
pivotTable->CalculateData();

// Enregistrez le fichier Excel de sortie
workbook->Save(outputManipulatePivotTable);
Tableau croisé dynamique montrant les données mises à jour

Tableau croisé dynamique montrant les données mises à jour

Obtenez une licence gratuite

Afin d’essayer l’API sans limitation d’évaluation, vous pouvez demander une licence temporaire gratuite.

Conclusion

Dans cet article, vous avez appris à utiliser des tableaux croisés dynamiques dans des fichiers Excel à l’aide de C++. Plus précisément, vous avez appris à créer un tableau croisé dynamique et à trier, masquer et mettre à jour les données d’un tableau croisé dynamique à l’aide de C++. Aspose.Cells for C++ est une vaste API qui fournit un tas de fonctionnalités supplémentaires pour travailler avec des fichiers Excel. Vous pouvez explorer l’API en détail en visitant la documentation officielle. En cas de questions, n’hésitez pas à nous contacter sur notre forum d’assistance gratuit.

Voir également