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
- Créer un tableau croisé dynamique dans un fichier Excel à l’aide de C++
- Trier le tableau croisé dynamique dans un fichier Excel à l’aide de C++
- Masquer des lignes dans un tableau croisé dynamique à l’aide de C++
- Manipuler les données d’un tableau croisé dynamique à 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.
- Tout d’abord, créez une instance de la classe IWorkbook pour représenter le nouveau fichier Excel.
- Accédez à la feuille de calcul dans laquelle vous souhaitez insérer le tableau croisé dynamique à l’aide de la méthode IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Ajoutez des exemples de données pour le tableau croisé dynamique.
- Ajoutez un tableau croisé dynamique à l’aide de IWorksheet->GetIPivotTables()->Add(intrusiveptrAspose::Cells::Systems::String sourceData, intrusiveptrAspose::Cells::Systems::String destCellName, intrusiveptrAspose::Cells::Systems::String tableName) méthode.
- Pour accéder au tableau croisé dynamique, utilisez la méthode IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Manipulez les champs et définissez le style du tableau croisé dynamique.
- Enfin, enregistrez le fichier Excel à l’aide de IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nom_fichier) méthode.
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")));
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.
- Tout d’abord, chargez l’exemple de fichier Excel à l’aide de la classe IWorkbook.
- Récupérez la feuille de calcul contenant le tableau croisé dynamique à l’aide de la méthode IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Accédez au tableau croisé dynamique à l’aide de la méthode IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Obtenez le champ de ligne et triez le tableau croisé dynamique à l’aide des méthodes IPivotField->SetAutoSort(bool value) et IPivotField->SetAscendSort(bool value).
- Actualisez le contenu du tableau croisé dynamique et calculez les données à l’aide des méthodes IPivotTable->RefreshData() et IPivotTable->CalculateData() respectivement.
- Enfin, enregistrez le fichier Excel à l’aide de IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nom_fichier) méthode.
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);
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.
- Tout d’abord, chargez l’exemple de fichier Excel à l’aide de la classe IWorkbook.
- Récupérez la feuille de calcul contenant le tableau croisé dynamique à l’aide de la méthode IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Accédez au tableau croisé dynamique à l’aide de la méthode IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Obtenez la plage de corps de données du tableau croisé dynamique à l’aide de la méthode IPivotTable->GetIDataBodyRange().
- Parcourez les lignes du tableau croisé dynamique et masquez les lignes répondant à vos critères.
- Actualisez le contenu du tableau croisé dynamique et calculez les données à l’aide des méthodes IPivotTable->RefreshData() et IPivotTable->CalculateData() respectivement.
- Enfin, enregistrez le fichier Excel à l’aide de IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nom_fichier) méthode.
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);
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.
- Tout d’abord, chargez l’exemple de fichier Excel à l’aide de la classe IWorkbook.
- Récupérez la feuille de calcul contenant les données du tableau croisé dynamique à l’aide de la méthode IWorkbook->GetIWorksheets()->GetObjectByIndex (Aspose::Cells::Systems::Int32 index).
- Mettez à jour les données du tableau croisé dynamique en fonction de vos besoins.
- Pour accéder au tableau croisé dynamique, utilisez la méthode IWorksheet->GetIPivotTables()->GetObjectByIndex(Aspose::Cells::Systems::Int32 index).
- Actualisez le contenu du tableau croisé dynamique et calculez les données à l’aide des méthodes IPivotTable->RefreshData() et IPivotTable->CalculateData() respectivement.
- Enfin, enregistrez le fichier Excel à l’aide de IWorkbook->Save (intrusiveptrAspose::Cells::Systems::String nom_fichier) méthode.
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);
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.