Crear Gráficos Dinámicos

Uso de Tablas de Excel

ListObjects proporciona la funcionalidad integrada para ordenar y filtrar los datos mediante la interacción del usuario. Ambas opciones de ordenamiento y filtrado se ofrecen a través de las listas desplegables que se agregan automáticamente a la fila de encabezado del. Debido a estas características (ordenamiento y filtrado), el ListObject parece ser el candidato perfecto para servir como fuente de datos para un gráfico dinámico porque cuando se cambia el ordenamiento o filtrado, la representación de los datos en el gráfico cambiará para reflejar el estado actual del.

Para mantener la demostración simple de entender, crearemos la Workbook desde cero y avanzaremos paso a paso como se describe a continuación.

  1. Crear un Workbook vacío.
  2. Acceder al Cells del primer Worksheet en el Workbook.
  3. Insertar algunos datos en las celdas.
  4. Crear ListObject basado en los datos insertados.
  5. Crear Chart basado en el rango de datos de ListObject.
  6. Guarde el resultado en el disco.
from aspose.cells import Workbook
from aspose.cells.charts import ChartType
# For complete examples and data files, please go to https:# github.com/aspose-cells/Aspose.Cells-for-.NET
# The path to the documents directory.
dataDir = RunExamples.GetDataDir(".")
# Create an instance of Workbook
book = Workbook()
# Access first worksheet from the collection
sheet = book.worksheets[0]
# Access cells collection of the first worksheet
cells = sheet.cells
# Insert data column wise
cells.get("A1").put_value("Category")
cells.get("A2").put_value("Fruit")
cells.get("A3").put_value("Fruit")
cells.get("A4").put_value("Fruit")
cells.get("A5").put_value("Fruit")
cells.get("A6").put_value("Vegetables")
cells.get("A7").put_value("Vegetables")
cells.get("A8").put_value("Vegetables")
cells.get("A9").put_value("Vegetables")
cells.get("A10").put_value("Beverages")
cells.get("A11").put_value("Beverages")
cells.get("A12").put_value("Beverages")
cells.get("B1").put_value("Food")
cells.get("B2").put_value("Apple")
cells.get("B3").put_value("Banana")
cells.get("B4").put_value("Apricot")
cells.get("B5").put_value("Grapes")
cells.get("B6").put_value("Carrot")
cells.get("B7").put_value("Onion")
cells.get("B8").put_value("Cabage")
cells.get("B9").put_value("Potatoe")
cells.get("B10").put_value("Coke")
cells.get("B11").put_value("Coladas")
cells.get("B12").put_value("Fizz")
cells.get("C1").put_value("Cost")
cells.get("C2").put_value(2.2)
cells.get("C3").put_value(3.1)
cells.get("C4").put_value(4.1)
cells.get("C5").put_value(5.1)
cells.get("C6").put_value(4.4)
cells.get("C7").put_value(5.4)
cells.get("C8").put_value(6.5)
cells.get("C9").put_value(5.3)
cells.get("C10").put_value(3.2)
cells.get("C11").put_value(3.6)
cells.get("C12").put_value(5.2)
cells.get("D1").put_value("Profit")
cells.get("D2").put_value(0.1)
cells.get("D3").put_value(0.4)
cells.get("D4").put_value(0.5)
cells.get("D5").put_value(0.6)
cells.get("D6").put_value(0.7)
cells.get("D7").put_value(1.3)
cells.get("D8").put_value(0.8)
cells.get("D9").put_value(1.3)
cells.get("D10").put_value(2.2)
cells.get("D11").put_value(2.4)
cells.get("D12").put_value(3.3)
# Create ListObject, Get the List objects collection in the first worksheet
listObjects = sheet.list_objects
# Add a List based on the data source range with headers on
index = listObjects.add(0, 0, 11, 3, True)
sheet.auto_fit_columns()
# Create chart based on ListObject
index = sheet.charts.add(ChartType.COLUMN, 21, 1, 35, 18)
chart = sheet.charts[index]
chart.set_chart_data_range("A1:D12", True)
chart.n_series.category_data = "A2:B12"
# Save spreadsheet
book.save(dataDir + "output_out.xlsx")

Uso de Fórmulas Dinámicas

En caso de que no desees utilizar la ListObject como fuente de datos para el gráfico dinámico, la otra opción es utilizar las funciones de Excel (o fórmulas) para crear un rango dinámico de datos, y un control (como ComboBox) para desencadenar el cambio en los datos. En este escenario, usaremos la función VLOOKUP para obtener los valores apropiados en función de la selección de ComboBox. Cuando se cambia la selección, la función VLOOKUP actualizará el valor de la celda. Si un rango de celdas está utilizando la función VLOOKUP, todo el rango puede ser actualizado mediante la interacción del usuario, por lo tanto, puede utilizarse como fuente para el gráfico dinámico.

Para mantener la demostración simple de entender, crearemos el libro de trabajo desde cero y avanzaremos paso a paso según se describe a continuación.

  1. Crear un Workbook vacío.
  2. Acceder al Cells del primer Worksheet en el Workbook.
  3. Inserte algunos datos en las celdas creando un Rango Nombrado. Estos datos servirán como una serie para el gráfico dinámico.
  4. Cree ComboBox basado en el Rango Nombrado creado en el paso anterior.
  5. Inserte más datos en las celdas que servirán como origen para la función VLOOKUP.
  6. Inserte la función VLOOKUP (con los parámetros apropiados) en un rango de celdas. Este rango servirá como origen para el gráfico dinámico.
  7. Cree Chart basado en el rango creado en el paso anterior.
  8. Guarde el resultado en el disco.
from aspose.cells import Workbook
from aspose.cells.charts import ChartType
from aspose.pydrawing import Color
# For complete examples and data files, please go to https:# github.com/aspose-cells/Aspose.Cells-for-.NET
# The path to the documents directory.
dataDir = RunExamples.GetDataDir(".")
# Create a workbook object
workbook = Workbook()
# Get the first worksheet
worksheet = workbook.worksheets[0]
# Create a range in the second worksheet
range = worksheet.cells.create_range("C21", "C24")
# Name the range
range.name = "MyRange"
# Fill different cells with data in the range
range.get(0, 0).put_value("North")
range.get(1, 0).put_value("South")
range.get(2, 0).put_value("East")
range.get(3, 0).put_value("West")
comboBox = worksheet.shapes.add_combo_box(15, 0, 2, 0, 17, 64)
comboBox.input_range = "=MyRange"
comboBox.linked_cell = "=B16"
comboBox.selected_index = 0
cell = worksheet.cells.get("B16")
style = cell.get_style()
style.font.color = Color.white
cell.set_style(style)
worksheet.cells.get("C16").formula = "=INDEX(Sheet1!$C$21:$C$24,$B$16,1)"
# Put some data for chart source
# Data Headers
worksheet.cells.get("D15").put_value("Jan")
worksheet.cells.get("D20").put_value("Jan")
worksheet.cells.get("E15").put_value("Feb")
worksheet.cells.get("E20").put_value("Feb")
worksheet.cells.get("F15").put_value("Mar")
worksheet.cells.get("F20").put_value("Mar")
worksheet.cells.get("G15").put_value("Apr")
worksheet.cells.get("G20").put_value("Apr")
worksheet.cells.get("H15").put_value("May")
worksheet.cells.get("H20").put_value("May")
worksheet.cells.get("I15").put_value("Jun")
worksheet.cells.get("I20").put_value("Jun")
# Data
worksheet.cells.get("D21").put_value(304)
worksheet.cells.get("D22").put_value(402)
worksheet.cells.get("D23").put_value(321)
worksheet.cells.get("D24").put_value(123)
worksheet.cells.get("E21").put_value(300)
worksheet.cells.get("E22").put_value(500)
worksheet.cells.get("E23").put_value(219)
worksheet.cells.get("E24").put_value(422)
worksheet.cells.get("F21").put_value(222)
worksheet.cells.get("F22").put_value(331)
worksheet.cells.get("F23").put_value(112)
worksheet.cells.get("F24").put_value(350)
worksheet.cells.get("G21").put_value(100)
worksheet.cells.get("G22").put_value(200)
worksheet.cells.get("G23").put_value(300)
worksheet.cells.get("G24").put_value(400)
worksheet.cells.get("H21").put_value(200)
worksheet.cells.get("H22").put_value(300)
worksheet.cells.get("H23").put_value(400)
worksheet.cells.get("H24").put_value(500)
worksheet.cells.get("I21").put_value(400)
worksheet.cells.get("I22").put_value(200)
worksheet.cells.get("I23").put_value(200)
worksheet.cells.get("I24").put_value(100)
# Dynamically load data on selection of Dropdown value
worksheet.cells.get("D16").formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,2,FALSE),0)"
worksheet.cells.get("E16").formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,3,FALSE),0)"
worksheet.cells.get("F16").formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,4,FALSE),0)"
worksheet.cells.get("G16").formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,5,FALSE),0)"
worksheet.cells.get("H16").formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,6,FALSE),0)"
worksheet.cells.get("I16").formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,7,FALSE),0)"
# Create Chart
index = worksheet.charts.add(ChartType.COLUMN, 0, 3, 12, 9)
chart = worksheet.charts[index]
chart.n_series.add("='Sheet1'!$D$16:$I$16", False)
chart.n_series[0].name = "=C16"
chart.n_series.category_data = "=$D$15:$I$15"
# Save result on disc
workbook.save(dataDir + "output_out.xlsx")