找回密码
 立即注册

QQ登录

只需一步,快速开始

Ellia.Duan SpreadJS 开发认证
超级版主   /  发表于:2022-12-28 15:30  /   查看:1632  /  回复:0
本帖最后由 Ellia.Duan 于 2022-12-28 15:30 编辑

有很多熟悉GcExcel学习指南的用户发现,在GcExcel中创建图表,发现获取数据源的区域是连续的,如:
  1. shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);
复制代码
首先了解下系列概念
系列是指一组数据点,或仅是图表中绘制的值列表。
使用电子表格时,您可以在图表中绘制一个或多个数据系列。每个系列都有一个图例项,并提供对图表控件系列对象集合的访问。
在GcExcel Java中,ISeries接口和ISeriesCollection接口的方法使用户可以根据需要插入单个系列,对其进行访问,将其删除以及执行其他有用的操作。
  1. // Adding Charts
  2. IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 250, 20, 360, 230);
  3. worksheet.getRange("A1:D6").setValue(new Object[][]
  4. {
  5.        {null, "S1", "S2", "S3"},
  6.        {"Item1", 10, 25, 25},
  7.        {"Item2", -51, -36, 27},
  8.        {"Item3", 52, -85, -30},
  9.        {"Item4", 22, 65, 65},
  10.        {"Item5", 23, 69, 69}
  11. });

  12. // Detects three series, B2:B6, C2:C6, D2:D6.
  13. // Does not detect out series labels and category labels, auto generated.
  14. shape.getChart().getSeriesCollection().add(worksheet.getRange("B2:D6"));
复制代码
执行后效果如下所示:
image.png406235656.png
如果此时修改区域为
  1. shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"));
复制代码
执行后效果如下所示:
image.png384180602.png
如果此时类别轴数值不在第一列,回到问题本身,如何实现呢?
  1.      IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 300, 10, 300, 300);
  2.         worksheet.getRange("A1:E4").setValue(new Object[][]{
  3.                 {"系列一", "系列二", "系列三", "系列四", ""},
  4.                 {8, 1, 2, 5, "类别1"},
  5.                 {9, 2, 3, 6, "类别2"},
  6.                 {10, 3, 4, 7, "类别3"},
  7.         });

  8.         //create chart.
  9.         ISeries series1 = shape.getChart().getSeriesCollection().newSeries();
  10.         ISeries series2 = shape.getChart().getSeriesCollection().newSeries();
  11.         ISeries series3 = shape.getChart().getSeriesCollection().newSeries();
  12.         ISeries series4 = shape.getChart().getSeriesCollection().newSeries();
  13.         series1.setFormula("=SERIES(Sheet1!$B$1,Sheet1!$E$2:$E$4,Sheet1!$B$2:$B$4,1)");
  14.         series2.setFormula("=SERIES(Sheet1!$C$1,Sheet1!$E$2:$E$4,Sheet1!$C$2:$C$4,2)");
  15.         series3.setFormula("=SERIES(Sheet1!$A$1,Sheet1!$E$2:$E$4,Sheet1!$A$2:$A$4,3)");
  16.         series4.setFormula("=SERIES(Sheet1!$D$1,Sheet1!$E$2:$E$4,Sheet1!$D$2:$D$4,3)");
复制代码

此时,可以用SERIES公式,执行后效果如下所示:
image.png819057922.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部