Drei Methoden zum Filtern von Diagrammdaten mit C++
1. Herausfiltern von Reihen, um ein Diagramm zu rendern
Schritte zum Filtern von Reihen aus einem Diagramm in Excel
In Excel können wir bestimmte Serien aus einem Diagramm herausfiltern, sodass diese gefilterten Serien im Diagramm nicht angezeigt werden. Das Originaldiagramm ist in Abbildung 1 dargestellt. Wenn wir jedoch Testseries2 und Testseries4 herausfiltern, erscheint das Diagramm wie in Abbildung 2.
In Aspose.Cells können wir eine ähnliche Operation durchführen. Für eine Beispieldatei wie diese, wenn wir Testseries2 und Testseries4 filtern wollen, führen wir den folgenden Code aus. Außerdem verwalten wir zwei Listen: eine (GetNSeries()), um alle ausgewählten Serien zu speichern, und eine (GetFilteredNSeries), um die gefilterten Serien zu speichern.
Bitte beachten Sie, dass im Code, wenn wir chart->GetNSeries()->Get(0)->SetIsFiltered(true); setzen, die erste Serie in GetNSeries() entfernt wird und an der entsprechenden Stelle in GetFilteredNSeries eingefügt wird. Danach wird das vorherige NSeries[1] das neue erste Element in der Liste, und alle folgenden Serien verschieben sich um eine Position. Das bedeutet, wenn wir dann chart->GetNSeries()->Get(1)->SetIsFiltered(true); ausführen, wird die ursprüngliche dritte Serie entfernt. Dieser Vorgang kann manchmal verwirrend sein, daher empfehlen wir, die Operation im Code zu befolgen, die Serien vom Ende zum Anfang löscht.
Beispielcode
Der folgende Beispielcode lädt die Beispieldatei Excel.
#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. Filtern Sie die Daten und lassen Sie das Diagramm sich ändern
Das Filtern Ihrer Daten ist eine großartige Möglichkeit, mit Diagrammfiltern bei großen Datenmengen umzugehen. Wenn Sie die Daten filtern, ändert sich das Diagramm. Ein Problem, das wir lösen müssen, ist sicherzustellen, dass das Diagramm auf dem Bildschirm bleibt. Beim Filtern werden versteckte Zeilen angezeigt, und manchmal befindet sich das Diagramm in diesen versteckten Zeilen.
Schritte zum Verwenden von Datenfiltern zum Ändern des Diagramms in Excel
- Klicken Sie innerhalb Ihres Datenbereichs.
- Klicken Sie auf die Registerkarte Daten und aktivieren Sie Filter, indem Sie auf Filter klicken. Ihre Kopfzeile wird Dropdown-Pfeile haben.
- Erstellen Sie ein Diagramm, indem Sie zum Einfügen-Tab gehen und ein Säulendiagramm auswählen.
- Filtern Sie nun Ihre Daten mithilfe der Dropdown-Pfeile in den Daten. Verwenden Sie nicht die Diagrammfilter.
Beispielcode
Der folgende Beispielcode zeigt die gleiche Funktion mit 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. Filtern Sie die Daten mithilfe einer Tabelle und lassen Sie das Diagramm sich ändern.
Die Verwendung einer Tabelle ist ähnlich wie Methode 2, die Verwendung eines Bereichs, aber Sie haben mit Tabellen Vorteile gegenüber Bereichen. Wenn Sie Ihren Bereich in eine Tabelle ändern und Daten hinzufügen, wird das Diagramm automatisch aktualisiert. Mit einem Bereich müssten Sie die Datenquelle ändern.
Als Tabelle formatieren in Excel
Klicken Sie in Ihre Daten und verwenden Sie STRG + T oder gehen Sie zum Register Start, Als Tabelle formatieren
Beispielcode
Der folgende Beispielcode lädt die Beispiel Excel-Datei und zeigt die gleiche Funktion mit 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>
}