Tres métodos para filtrar datos de gráficos
1. Filtrado de series para representar un gráfico
Pasos para filtrar series de un gráfico en Excel
En Excel, podemos filtrar series específicas de un gráfico, lo que hace que esas series filtradas no se muestren en el gráfico. El gráfico original se muestra en Figura 1. Sin embargo, cuando filtramos Testseries2 y Testseries4, el gráfico aparecerá como se muestra en Figura 2.
En Aspose.Cells, podemos realizar una operación similar. Para un archivo de muestra como este, si queremos filtrar Testseries2 y Testseries4, podemos ejecutar el siguiente código. Además, mantendremos dos listas: una lista (NSeries) para almacenar todas las series seleccionadas y otra (FilteredNSeries) para almacenar las series filtradas.
Por favor, nota que en el código, cuando establecemos chart.NSeries[0].IsFiltered = true;, la primera serie en NSeries se eliminará y se colocará en la posición correspondiente dentro de FilteredNSeries. Posteriormente, la anterior NSeries[1] se convertirá en el nuevo primer elemento en la lista, y todas las series siguientes se desplazarán hacia adelante en una posición. Esto significa que si luego ejecutamos chart.NSeries[1].IsFiltered = true;, estaremos eliminando efectivamente la tercera serie original. Esto a veces puede causar confusión, por lo que recomendamos seguir la operación en el código, que elimina las series desde el final hasta el principio.
Código de muestra
El siguiente código de muestra carga el archivo de Excel de muestra.
// 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. Filtra los datos y permite que el gráfico cambie
Filtrar tus datos es una excelente manera de manejar los filtros de gráficos con muchos datos. Cuando filtras los datos, el gráfico cambiará. Un problema que tendremos que abordar es asegurarnos de que el gráfico permanezca en la pantalla. Cuando filtras, obtienes filas ocultas y, ocasionalmente, el gráfico estará en esas filas ocultas.
Pasos para utilizar los Filtros de Datos para cambiar el gráfico en Excel
- Haz clic dentro de tu rango de datos.
- Haz clic en la pestaña Datos y activa los Filtros haciendo clic en Filtros. Tu fila de encabezado tendrá flechas desplegables.
- Crea un gráfico yendo a la pestaña Insertar y seleccionando un gráfico de columnas.
- Ahora filtra tus datos usando las flechas desplegables en los datos. No uses los Filtros de Gráfico.
Código de muestra
El siguiente código de muestra muestra la misma característica usando 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. Filtra los datos utilizando una Tabla y permite que el gráfico cambie
Utilizar una Tabla es similar al Método 2, utilizando un rango, pero tienes ventajas con las tablas sobre los rangos. Cuando cambias tu rango a una Tabla y agregas datos, el gráfico se actualiza automáticamente. Con un rango, tendrás que cambiar la fuente de datos.
Formatear como tabla en Excel
Haz clic dentro de tus datos y usa CTRL + T o ve a la pestaña Inicio, Formato como Tabla
Código de muestra
El siguiente código de muestra carga el archivo de Excel de muestra muestra la misma característica usando 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"); |