C++ ile Grafik Verilerini Filtreleme İçin Üç Yöntem
1. Bir grafik oluşturmak için serileri filtreleme
Excel’de bir grafikten serileri filtreleme adımları
Excel’de, belirli serileri grafikten çıkarabiliriz, bu da o serilerin grafikte gösterilmeyeceği anlamına gelir. Orijinal grafiği Şekil 1‘de gösterilmiştir. Ancak, Testserisi2 ve Testserisi4‘ü filtrelediğimizde, grafik aşağıdaki gibi görünecektir, Şekil 2.
Aspose.Cells’te benzer işlemler yapabiliriz. Bu örnek dosyası gibi bir dosyada, Testserisi2 ve Testserisi4‘ü filtrelemek istiyorsak, aşağıdaki kodu çalıştırabiliriz. Ayrıca, iki liste tutacağız: tüm seçilen serileri depolamak için (GetNSeries()), ve filtrelenmiş serileri depolamak için (GetFilteredNSeries).
Lütfen not edin ki, kodda, chart->GetNSeries()->Get(0)->SetIsFiltered(true); satırını ayarladığımızda, GetNSeries() listesinin ilk serisi kaldırılır ve uygun konuma GetFilteredNSeries listesine yerleştirilir. Ardından, önceki NSeries[1] yeni listenin ilk öğesi olur ve diğer seriler bir pozisyon ileri kayar. Bu durumda, eğer chart->GetNSeries()->Get(1)->SetIsFiltered(true); kodunu çalıştırırsak, orijinal üçüncü seriyi kaldırmış oluruz. Bu bazen kafa karıştırıcı olabilir, bu yüzden kodda yapılan işlemi, sondan başa doğru serileri silerek takip etmenizi öneririz.
Örnek Kod
Aşağıdaki örnek kodu örnek Excel dosyasını yükler.
#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. Veriyi filtrele ve grafiği değiştirmesine izin ver
Verilerinizi filtrelemek, çok fazla veri ile grafik filtreleriyle başa çıkmanın mükemmel bir yoludur. Verileri filtrelediğinizde, grafik değişecektir. Çözmemiz gereken önemli bir konu, grafiğin ekranda kalmasını sağlamaktır. Filtre uyguladığınızda, gizli satırlar oluşur ve zaman zaman grafik bu gizli satırlarda olur.
Excel’de Grafikteki Değişikliği Uygulamak İçin Veri Filtrelerini Kullanma Adımları
- Veri aralığınızın içine tıklayın.
- Veri sekmesine tıklayın ve Filtreleri açmak için Filtreleri tıklayın. Başlık satırınızın açılır oklarının olması gerekecektir.
- Ekle sekmesine giderek sütun grafiği seçerek bir grafik oluşturun.
- Verilerinizi veri içindeki açılır oklar kullanarak filtreleyin. Grafik Filtreleri kullanmayın.
Örnek Kod
Aşağıdaki örnek kod, aynı özelliği Aspose.Cells kullanarak gösterir.
#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. Verileri bir Tablo kullanarak filtreleyin ve grafiği değiştirin
Tablo kullanımı, bir aralık kullanmakla bir yöntem 2’ye benzer, ancak tabloların aralıklara göre avantajları vardır. Aralığınızı bir Tablo’ya değiştirip veri eklediğinizde, grafik otomatik olarak güncellenir. Bir aralıkta veri kaynağını değiştirmeniz gerekecektir.
Excel’de tablo olarak biçimlendir
Veri içine tıklayın ve CTRL + T kullanın veya Ana sekme, Tablo Olarak Biçimlendiri kullanın
Örnek Kod
Aşağıdaki örnek kod, örnek Excel dosyasını yükler ve Aspose.Cells kullanarak aynı özelliği gösterir.
#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>
}