Trois méthodes pour filtrer les données du graphique avec C++
1. Filtrer les séries pour afficher un graphique
Étapes pour filtrer les séries d’un graphique dans Excel
Dans Excel, nous pouvons filtrer des séries spécifiques dans un graphique, ce qui empêche ces séries filtrées d’être affichées dans le graphique. Le graphique original est montré dans Figure 1. Cependant, lorsque nous filtrons Testseries2 et Testseries4, le graphique apparaîtra comme dans Figure 2.
Dans Aspose.Cells, nous pouvons effectuer une opération similaire. Pour un fichier exemple comme celui-ci, si nous voulons filtrer Testseries2 et Testseries4, nous pouvons exécuter le code suivant. De plus, nous maintiendrons deux listes : une (GetNSeries()) pour stocker toutes les séries sélectionnées et une autre (GetFilteredNSeries) pour stocker les séries filtrées.
Veuillez noter qu’en code, lorsque nous définissons chart->GetNSeries()->Get(0)->SetIsFiltered(true);, la première série dans GetNSeries() sera supprimée et placée à la position appropriée dans GetFilteredNSeries. Ensuite, le [NSeries[1]] précédent deviendra le nouvel élément en premier dans la liste, et toutes les séries suivantes décaleront vers l’avant de une position. Cela signifie que si nous exécutons alors chart->GetNSeries()->Get(1)->SetIsFiltered(true);, nous supprimons effectivement la troisième série d’origine. Cela peut parfois prêter à confusion, donc nous recommandons de suivre l’opération dans le code, qui supprime les séries du fin au début.
Code d’exemple
Le code d’exemple suivant charge le fichier Excel d’exemple.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
<span class="c1">// Create an instance of existing Workbook
Workbook workbook(u"seriesFiltered.xlsx");
<span class="c1">// Get filtered series list
SeriesCollection nSeriesFiltered = workbook.GetWorksheets().Get(0).GetCharts().Get(u"Chart 1").GetFilteredNSeries();
<span class="c1">// Get selected series list
SeriesCollection nSeries = workbook.GetWorksheets().Get(0).GetCharts().Get(u"Chart 1").GetNSeries();
<span class="c1">// Should be 0
std::cout << "Filtered Series count: " << nSeriesFiltered.GetCount() << std::endl;
<span class="c1">// Should be 6
std::cout << "Visible Series count: " << nSeries.GetCount() << std::endl;
<span class="c1">// Process from the end to the beginning
nSeries.Get(1).SetIsFiltered(true);
nSeries.Get(0).SetIsFiltered(true);
<span class="c1">// Should be 2
std::cout << "Filtered Series count: " << nSeriesFiltered.GetCount() << std::endl;
<span class="c1">// Should be 4
std::cout << "Visible Series count: " << nSeries.GetCount() << std::endl;
<span class="c1">// Save the workbook
workbook.Save(u"seriesFiltered-out.xlsx");
<span class="c1">// Reload the workbook
workbook = Workbook(u"seriesFiltered-out.xlsx");
<span class="c1">// Should be 2
std::cout << "Filtered Series count: " << nSeriesFiltered.GetCount() << std::endl;
<span class="c1">// Should be 4
std::cout << "Visible Series count: " << nSeries.GetCount() << std::endl;
<span class="n">Aspose</span><span class="o">::</span><span class="n">Cells</span><span class="o">::</span><span class="n">Cleanup</span><span class="p">();</span>
}
2. Filtrer les données et laisser le changement de graphique
Filtrer vos données est une excellente façon de gérer les filtres de graphiques avec beaucoup de données. Lorsque vous filtrez les données, le graphique changera. Un problème que nous devrons résoudre est de faire en sorte que le graphique reste à l’écran. Lors du filtrage, des lignes masquées apparaissent, et parfois, le graphique sera dans ces lignes masquées.
Étapes pour utiliser les filtres de données pour changer le graphique dans Excel
- Cliquez à l’intérieur de la plage de vos données.
- Cliquez sur l’onglet Données, et activez les filtres en cliquant sur Filtres. Votre ligne d’en-tête aura des flèches déroulantes.
- Créez un graphique en allant sur l’onglet Insertion et en sélectionnant un graphique à colonnes.
- Filtrer maintenant vos données en utilisant les flèches déroulantes dans les données. N’utilisez pas les filtres de graphique.
Code d’exemple
Le code d’exemple suivant montre la même fonctionnalité en utilisant Aspose.Cells.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
int main() {
Aspose::Cells::Startup();
<span class="c1">// Create an instance of Workbook
Workbook workbook;
<span class="c1">// Get the First sheet.
Worksheet sheet = workbook.GetWorksheets().Get(u"Sheet1");
<span class="c1">// Add data into details cells.
sheet.GetCells().Get(0, 0).PutValue(u"Fruits Name");
sheet.GetCells().Get(0, 1).PutValue(u"Fruits Price");
sheet.GetCells().Get(1, 0).PutValue(u"Apples");
sheet.GetCells().Get(2, 0).PutValue(u"Bananas");
sheet.GetCells().Get(3, 0).PutValue(u"Grapes");
sheet.GetCells().Get(4, 0).PutValue(u"Oranges");
sheet.GetCells().Get(1, 1).PutValue(5);
sheet.GetCells().Get(2, 1).PutValue(2);
sheet.GetCells().Get(3, 1).PutValue(1);
sheet.GetCells().Get(4, 1).PutValue(4);
<span class="c1">// Add a chart to the worksheet
int chartIndex = sheet.GetCharts().Add(ChartType::Column, 7, 7, 15, 15);
<span class="c1">// Access the instance of the newly added chart
Chart chart = sheet.GetCharts().Get(chartIndex);
<span class="c1">// Set data range
chart.SetChartDataRange(u"A1:B5", true);
<span class="c1">// Set AutoFilter range
sheet.GetAutoFilter().SetRange(u"A1:B5");
<span class="c1">// Add filters for a filter column.
sheet.GetAutoFilter().AddFilter(0, u"Bananas");
sheet.GetAutoFilter().AddFilter(0, u"Oranges");
<span class="c1">// Apply the filters
sheet.GetAutoFilter().Refresh();
<span class="c1">// Save the chart as an image
chart.ToImage(u"Autofilter.png");
<span class="c1">// Save the workbook
workbook.Save(u"Autofilter.xlsx");
<span class="n">Aspose</span><span class="o">::</span><span class="n">Cells</span><span class="o">::</span><span class="n">Cleanup</span><span class="p">();</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
}
3. Filtrer les données en utilisant un tableau et laisser le changement du graphique
Utiliser un tableau est similaire à la Méthode 2, en utilisant une plage, mais vous avez des avantages avec les tableaux par rapport aux plages. Lorsque vous modifiez votre plage en un tableau et ajoutez des données, le graphique se met à jour automatiquement. Avec une plage, vous devrez modifier la source de données.
Format en tableau dans Excel
Cliquez à l’intérieur de vos données et utilisez CTRL + T ou utilisez l’onglet Accueil, Format en Tableau
Code d’exemple
Le code d’exemple suivant charge le fichier Excel d’exemple et montre la même fonctionnalité en utilisant Aspose.Cells.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
using namespace Aspose::Cells::Tables;
int main()
{
Aspose::Cells::Startup();
<span class="c1">// Create a workbook
Workbook workbook(u"TableFilters.xlsx");
<span class="c1">// Access first worksheet
Worksheet sheet = workbook.GetWorksheets().Get(0);
<span class="c1">// Access the instance of the newly added chart
int chartIndex = sheet.GetCharts().Add(ChartType::Column, 7, 7, 15, 15);
Chart chart = sheet.GetCharts().Get(chartIndex);
<span class="c1">// Set data range
chart.SetChartDataRange(u"A1:B7", true);
<span class="c1">// Convert the chart to image
chart.ToImage(u"TableFilters.before.png");
<span class="c1">// Add a new List Object to the worksheet
ListObject listObject = sheet.GetListObjects().Get(sheet.GetListObjects().Add(u"A1", u"B7", true));
<span class="c1">// Add default style to the table
listObject.SetTableStyleType(TableStyleType::TableStyleMedium10);
<span class="c1">// Show Total
listObject.SetShowTotals(false);
<span class="c1">// Add filters for a filter column
listObject.GetAutoFilter().AddFilter(0, u"James");
<span class="c1">// Apply the filters
listObject.GetAutoFilter().Refresh();
<span class="c1">// After adding new value the chart will change
listObject.PutCellValue(7, 0, Object(u"Me"));
listObject.PutCellValue(7, 1, Object(1000));
<span class="c1">// Check the changed images
chart.ToImage(u"TableFilters.after.png");
<span class="c1">// Saving the Excel file
workbook.Save(u"TableFilter.out.xlsx");
<span class="n">Aspose</span><span class="o">::</span><span class="n">Cells</span><span class="o">::</span><span class="n">Cleanup</span><span class="p">();</span>
}