过滤图表数据的三种方法
1. 过滤以渲染图表的系列
在Excel中,我们可以过滤掉图表中的特定系列,导致这些被过滤的系列不会显示在图表中。 原始图表显示在图1中。然而,当我们过滤掉Testseries2和Testseries4时,图表将会如图2所示。
在Excel中,我们可以过滤掉图表中的特定系列,导致被过滤的系列不会显示在图表中。原始图表如图1所示。然而,当我们过滤掉Testseries2和Testseries4时,图表将如图2所示。
在Aspose.Cells中,我们可以执行类似的操作。对于这样的示例文件,如果我们想要过滤掉Testseries2和Testseries4,我们可以执行以下代码。此外,我们将维护两个列表:一个(NSeries)列表以存储所有选定的系列,另一个(FilteredNSeries) 列表以存储被过滤的系列。
请注意,在代码中,当我们设置chart.NSeries[0].IsFiltered = true;时,NSeries中的第一个系列将被移除,并放置在FilteredNSeries的适当位置。随后,先前的NSeries[1]将成为列表中的新第一个项目,并且所有后续系列将向前移动一个位置。这意味着如果然后运行chart.NSeries[1].IsFiltered = true;,我们实际上是删除了原始的第三个系列。有时这会导致混乱,因此我们建议按照代码中的操作顺序,从末尾开始删除系列。
示例代码
以下示例代码加载了示例Excel文件。
// Create an instance of existing Workbook | |
Workbook workbook = new Workbook("seriesFiltered.xlsx"); | |
// Get filtered series list | |
SeriesCollection nSeriesFiltered = workbook.Worksheets[0].Charts["Chart 1"].FilteredNSeries; | |
// Get selected series list | |
SeriesCollection nSeries = workbook.Worksheets[0].Charts["Chart 1"].NSeries; | |
// Should be 0 | |
Console.WriteLine("Filtered Series count" + nSeriesFiltered.Count); | |
// Should be 6 | |
Console.WriteLine("Visiable Series count" + nSeries.Count); | |
// Process from the end to the beginning | |
nSeries[1].IsFiltered = true; | |
nSeries[0].IsFiltered = true; | |
// Should be 2 | |
Console.WriteLine("Filtered Series count" + nSeriesFiltered.Count); | |
// Should be 4 | |
Console.WriteLine("Visiable Series count" + nSeries.Count); | |
workbook.Save("seriesFiltered-out.xlsx"); | |
workbook = new Workbook("seriesFiltered-out.xlsx"); | |
// Should be 2 | |
Console.WriteLine("Filtered Series count" + nSeriesFiltered.Count); | |
// Should be 4 | |
Console.WriteLine("Visiable Series count" + nSeries.Count); |
2. 过滤数据并使图表发生变化
过滤数据是处理包含大量数据的图表筛选器的绝佳方法。当您过滤数据时,图表将发生变化。 我们需要解决的一个问题是确保图表保持在屏幕上。当您进行过滤时,会有隐藏行,并且偶尔图表将在这些隐藏行中。
使用数据筛选器更改Excel中图表的步骤
- 点击数据范围内部。
- 单击数据选项卡,通过单击筛选器进行筛选。 您的标题行将有下拉箭头。
- 通过转到插入选项卡并选择列图表来创建图表。
- 现在使用数据中的下拉箭头筛选您的数据。 不要使用图表筛选器。
示例代码
以下示例代码展示了使用Aspsoe.Cells实现相同功能的方法。
// Create an instance of Workbook | |
Workbook workbook = new Workbook(); | |
// Get the First sheet. | |
Worksheet sheet = workbook.Worksheets["Sheet1"]; | |
// Add data into details cells. | |
sheet.Cells[0, 0].PutValue("Fruits Name"); | |
sheet.Cells[0, 1].PutValue("Fruits Price"); | |
sheet.Cells[1, 0].PutValue("Apples"); | |
sheet.Cells[2, 0].PutValue("Bananas"); | |
sheet.Cells[3, 0].PutValue("Grapes"); | |
sheet.Cells[4, 0].PutValue("Oranges"); | |
sheet.Cells[1, 1].PutValue(5); | |
sheet.Cells[2, 1].PutValue(2); | |
sheet.Cells[3, 1].PutValue(1); | |
sheet.Cells[4, 1].PutValue(4); | |
// Add a chart to the worksheet | |
int chartIndex = sheet.Charts.Add(Aspose.Cells.Charts.ChartType.Column, 7, 7, 15, 15); | |
// Access the instance of the newly added chart | |
Aspose.Cells.Charts.Chart chart = sheet.Charts[chartIndex]; | |
// Set data range | |
chart.SetChartDataRange("A1:B5", true); | |
// Set AutoFilter range | |
sheet.AutoFilter.Range = "A1:B5"; | |
// Add filters for a filter column. | |
sheet.AutoFilter.AddFilter(0, "Bananas"); | |
sheet.AutoFilter.AddFilter(0, "Oranges"); | |
// Apply the filters | |
sheet.AutoFilter.Refresh(); | |
chart.ToImage("Autofilter.png"); | |
workbook.Save("Autofilter.xlsx"); |
3. 使用表格过滤数据并使图表发生变化
使用表格类似于方法2,使用范围,但表格比范围有优势。当您将范围更改为表格并添加数据时,图表会自动更新。使用范围时,您将不得不更改数据源。
在Excel中格式化为表格
单击数据内部并使用CTRL + T或使用主页选项卡,格式为表格
示例代码
以下示例代码加载了示例Excel文件展示了使用Aspsoe.Cells相同的功能。
// Create a workbook. | |
Workbook workbook = new Workbook("TableFilters.xlsx"); | |
// Access first worksheet | |
Worksheet sheet = workbook.Worksheets[0]; | |
// Access the instance of the newly added chart | |
int chartIndex = sheet.Charts.Add(Aspose.Cells.Charts.ChartType.Column, 7, 7, 15, 15); | |
Aspose.Cells.Charts.Chart chart = sheet.Charts[chartIndex]; | |
// Set data range | |
chart.SetChartDataRange("A1:B7", true); | |
// Convert the chart to image | |
chart.ToImage("TableFilters.before.png"); | |
// Add a new List Object to the worksheet | |
Aspose.Cells.Tables.ListObject listObject = sheet.ListObjects[sheet.ListObjects.Add("A1", "B7", true)]; | |
// Add default style to the table | |
listObject.TableStyleType = Aspose.Cells.Tables.TableStyleType.TableStyleMedium10; | |
// Show Total | |
listObject.ShowTotals = false; | |
// Add filters for a filter column. | |
listObject.AutoFilter.AddFilter(0, "James"); | |
// Apply the filters | |
listObject.AutoFilter.Refresh(); | |
//After adding new value the chart will change | |
listObject.PutCellValue(7, 0, "Me"); | |
listObject.PutCellValue(7, 1, 1000); | |
// Check the changed images | |
chart.ToImage("TableFilters.after.png"); | |
// Saving the Excel file | |
workbook.Save("TableFilter.out.xlsx"); |