创建动态图表

使用Excel表

ListObjects提供了以内置功能进行排序和筛选数据的能力。排序和筛选选项都通过自动添加到表头行的下拉列表提供。由于这些功能(排序和筛选),ListObject似乎是充当动态图表数据源的理想候选,因为当排序或筛选改变时,图表中的数据表现也将反映当前状态。

为了使演示简单易懂,我们将从头开始创建Workbook,并按照下面概述的步骤逐步进行。

  1. 创建一个空的Workbook
  2. 访问Workbook中第一个WorksheetCells
  3. 向单元格插入一些数据。
  4. 根据插入的数据创建ListObject
  5. 根据ListObject的数据范围创建Chart
  6. 将结果保存在磁盘上。
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")

使用动态公式

如果您不希望将ListObject作为动态图表的数据源,则另一个选项是使用Excel函数(或公式)创建动态数据范围,并使用控件(如下拉列表)触发数据更改。在这种情况下,我们将使用VLOOKUP函数根据下拉列表的选择来获取适当的值。选择更改时,VLOOKUP函数将刷新单元格值。如果一系列单元格使用VLOOKUP函数,则用户交互时可以刷新整个范围,因此它可以用作动态图表的数据源。

为了使演示简单易懂,我们将从头开始创建工作簿,并按照下面的步骤一步步地前进。

  1. 创建一个空的Workbook
  2. 访问Workbook中第一个WorksheetCells
  3. 通过创建命名范围在单元格中插入一些数据。这些数据将作为动态图表的系列。
  4. 根据先前步骤中创建的命名范围创建ComboBox
  5. 在作为VLOOKUP函数源的单元格中插入更多数据。
  6. 插入VLOOKUP函数(带适当参数)以一系列单元格。该范围将作为动态图表的数据源。
  7. 根据先前步骤中创建的范围创建Chart
  8. 将结果保存在磁盘上。
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")