ثلاث طرق لترشيح بيانات المخطط باستخدام C++
1. تصفية السلاسل لعرض رسم بياني
خطوات تصفية السلاسل من رسم بياني في إكسل
يمكننا في إكسل تصفية سلسلة معينة من المخطط، مما يؤدي إلى عدم عرض تلك السلاسل المصفاة في المخطط. يُعرض المخطط الأصلي في الشكل 1. ومع ذلك، عند تصفية Testseries2 وTestseries4، سيظهر المخطط كما هو موضح في الشكل 2.
في Aspose.Cells، يمكننا تنفيذ عملية مماثلة. لملف عينة كهذا، إذا أردنا تصفية Testseries2 وTestseries4، يمكننا تنفيذ الكود التالي. بالإضافة إلى ذلك، سنحتفظ بقائمتين: واحدة (GetNSeries()) لتخزين جميع السلاسل المختارة وأخرى (GetFilteredNSeries) لتخزين السلاسل المصفاة.
يرجى ملاحظة أنه في الكود، عندما نقوم بتعيين chart->GetNSeries()->Get(0)->SetIsFiltered(true);، سيتم إزالة السلسلة الأولى في GetNSeries() ووضعها في الموقع المناسب داخل GetFilteredNSeries. بعد ذلك، ستصبح NSeries[1] السابقة العنصر الأول في القائمة، وستتحرك جميع السلاسل التالية للأمام بموقع واحد. مما يعني أنه إذا ثم تشغيل chart->GetNSeries()->Get(1)->SetIsFiltered(true);، فإننا نزيل السلسلة الثالثة الأصلية فعليًا. قد يؤدي ذلك أحيانًا إلى ارتباك، لذلك نوصي باتباع الخطوة في الكود التي تحذف السلاسل من النهاية إلى البداية.
الكود المثالي
تحميل ملف إكسل العيني (ملف إكسل مرشّحة.xlsx).
#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. مرشّح البيانات واسمح للرسم البياني بالتغيير
تصفية بياناتك هي طريقة رائعة للتعامل مع مرشحات المخططات التي تحتوي على الكثير من البيانات. عندما تقوم بتصفية البيانات، سيتغير المخطط. إحدى القضايا التي سنواجهها هي التأكد من بقاء المخطط على الشاشة. عند التصفية، تحصل على صفوف مخفية، وأحيانًا، سيكون المخطط في تلك الصفوف المخفية.
خطوات استخدام مرشحات البيانات لتغيير الرسم البياني في إكسل
- انقر داخل نطاق البيانات الخاص بك.
- انقر على علامة التبويب البيانات، وقم بتشغيل المرشحات بالنقر فوق المرشحات. ستحتوي الصف المسمى على السهم المنسدل.
- إنشاء رسم بياني من خلال الانتقال إلى علامة التبويب إدراج وتحديد رسم بياني للأعمدة.
- الآن قم بتصفية بياناتك باستخدام السهوم المنسدلة في البيانات. لا تستخدم مرشحات الرسم البياني.
الكود المثالي
يعرض رمز النموذج التالي نفس الميزة باستخدام 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. فلتر البيانات باستخدام جدول واسمح للرسم البياني بالتغيير
استخدام جدول مشابه للطريقة 2، استخدام نطاق، ولكن لكم مزايا مع الجداول على النطاقات. عند تغيير النطاق إلى جدول وإضافة البيانات، سيقوم الرسم البياني بالتحديث تلقائيًا. مع نطاق، سيتعين عليك تغيير مصدر البيانات.
تنسيق باعتباره جدولاً في إكسل
انقر داخل بياناتك واستخدم CTRL + T أو استخدم علامة التبويب الرئيسية، تنسيق باعتبارها جدولاً
الكود المثالي
يرفع الرمز النموذجي التالي ملف إكسل النموذجي ويظهر نفس الميزة باستخدام 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>
}