[]
除了MS Excel支持的标准迷你图之外,SpreadJS还支持级联迷你图。GcExcel Java支持将包含级联迷你图的SpreadJS文件导出为JSON导入导出、HTML、图像和PDF格式。本主题讨论这些扩展迷你图以及如何在GcExcel Java中创建它们。
级联迷你图通常用于分析一段时间内的价值,如年销售额、总利润、净税收等。它广泛用于金融、销售、法律和建筑行业,仅举几个例子。例如,您可以使用级联迷你图来比较销售人员的支出和收入。
GcExcel Java提供了用于创建级联迷你图的 CASCADESPARKLINE 公式。
语法
= CASCADESPARKLINE(pointsRange, pointIndex, labelsRange, minimum, maximum, colorPositive, colorNegative, vertical)
参数
参数名称 | 描述 |
---|---|
pointsRange(必须) | 表示包含值的单元格范围的引用,如“B2:B8”。 |
pointIndex(必须) | 表示点索引的数字或引用。点索引是 >= 1,例如 1 或 “D2”。 |
LabelsRange(可选) | 表示包含标签的单元格范围的引用,如“A2:A8”。默认值为无标签。 |
Minimum(可选) | 表示显示区域最小值的数字或参考。默认值是总和(点值之和)的最小值,如-2000。您设置的最小值必须小于默认最小值;否则,使用默认最小值。 |
maximum(可选) | 表示显示区域最大值的数字或参考。默认值是总和(点值的总和)的最大值,如6000。您设置的最大值必须大于默认最大值;否则,将使用默认最大值。 |
colorPositive(可选) | 表示第一个或最后一个正迷你图框颜色的字符串(该点的值为正)。默认值为“#8CBF64”。如果第一个或最后一个框表示正值,则框的颜色将设置为 colorPositive 。中间正片框设置为比彩色正片更浅的颜色。 |
colorNegative(可选) | 表示第一个或最后一个负迷你图框颜色的字符串(该点的值为负)。默认值为“#D6604D”。如果第一个或最后一个框表示负值,则框的颜色将设置为colorNegative。中间负片框设置为比彩色负片更浅的颜色。 |
vertical(可选) | 表示框的方向是垂直还是水平的布尔值。默认值为FALSE。对于一组公式,必须将垂直设置为true或false,因为所有公式都表示整个迷你图。 |
itemTypeRange(可选) | 表示数据范围的所有项类型的数组或引用。这些值应为{-、“+”、“=”}或“A1:A7”,它们引用了{“+”、”-“、“=”的值,其中“+”表示正变化,“-”表示负变化,“=”表示总列数。 |
colorTotal(可选) | 一个字符串,当itemTypeRange不存在时表示最后一个小迷你图框的颜色,或者当ItemType Range存在时表示结果小迷你图的框的颜色。 |
请参考以下示例代码,使用公式添加级联迷你图。
// Add a cascade sparkline with horizontal bars.
for (int i = 1; i < 8; i++) {
worksheet.getRange(i, 2).setFormula("=CASCADESPARKLINE(B2:B8, ROW() - 1, A2:A8, , , \"#8CBF64\", \"#D6604D\", FALSE)");
}
线条型火花图展示了任何开支或数据的趋势,着重强调变化和波动。
语法:
= LINESPARKLINE(data,dataOrientation,[dateAxisData],[dateAxisOrientation],[setting])
参数:
参数名称 | 描述 |
---|---|
data | 一个范围引用,代表迷你图的数据,例如"A1:C3" |
dataOrientation | 一个数字,代表迷你图数据的方向。以下之一:
|
dateAxisData | 一个范围引用,代表迷你图日期轴的数据,例如"D1:F3"。如果没有dateAxisOrientation,则dateAxisData无效 |
dateAxisOrientation | 一个数字,代表迷你图日期轴的方向。以下之一:
|
setting | 一个JSON格式的字符串。格式:全名(缩写)[默认值]:描述 |
设置参数提供了以下大小写敏感的属性来设定:
参数名称 | 描述 |
---|---|
showFirst(sf) [默认:False] | 检查迷你图的第一个数据点是否以不同格式显示。 |
showHigh(sh) [默认:False] | 检查具有最高值的数据点是否以不同格式显示在迷你图上。 |
showLast(slast) [默认:False] | 检查迷你图的最后一个数据点是否以不同格式显示。 |
showLow(slow) [默认:False] | 检查具有最低值的数据点是否以不同格式显示在迷你图上。 |
showNegative(sn) [默认:False] | 检查负数数据点是否以不同格式显示在迷你图上。 |
showMarkers(sm) [默认:False] | 检查迷你图是否显示数据标记。 |
axisColor(ac) [默认:#000000] | 轴的颜色。 |
firstMarkerColor(fmc) [默认:#95B3D7] | 迷你图第一个数据点的颜色。 |
highMarkerColor(hmc) [默认:#0000FF] | 迷你图最高数据点的颜色。 |
lastMarkerColor(lastmc) [默认:#95B3D7] | 迷你图最后一个数据点的颜色。 |
lowMarkerColor(lowmc) [默认:#0000FF] | 迷你图最低数据点的颜色。 |
markersColor(mc) [默认:#244062] | 迷你图数据标记的颜色。 |
negativeColor(nc) [默认:#A52A2A] | 迷你图负数数据点的颜色。 |
seriesColor(sc) [默认:#244062] | 迷你图的颜色。 |
lineWeight(lw) [默认:1.0] | 表示迷你图的线宽,线宽以点为单位测量。线宽必须大于或等于零。 |
displayXAxis(dxa) [默认:False] | 表示是否显示迷你图的水平轴。 |
displayEmptyCellsAs(deca) [默认:0] | 表示如何显示空白单元格。 - 0: 对于数据系列中的空白值留出空隙,这将导致线条断开。 - 1: 将数据系列中的空白值处理为零值,因此线条会降至零值数据点处。 - 2: 使用连接元素填充空白值在数据系列中留下的空隙,而不是留下空隙。 |
displayHidden(dh) [默认:False] | 表示隐藏单元格中的数据是否被绘制到迷你图上。 |
manualMax(mmax)[默认:0] | 表示迷你图垂直轴的最大值。如果maxAxisType不等于'自定义(2)',则轴设置为零。 |
manualMin(mmin) [默认:0] | 表示迷你图垂直轴的最小值。如果minAxisType不等于'自定义(2)',则轴设置为零。 |
maxAxisType(maxat) [默认:0] | 表示垂直轴最大值的计算方式。 - 0: 指定迷你图的垂直轴最小值或最大值自动计算,以便可以将具有最小或最大值的数据点显示在绘图区域中。 - 2: 指定迷你图的垂直轴最小值或最大值由manualMin属性或manualMax属性指定。 |
minAxisType(minat) [默认:0] | 表示垂直轴最小值的计算方式,与maxAxisType类型类似。 |
rightToLeft(rtl) [默认:False] | 表示迷你图组中的每个迷你图是否以从右到左的方式显示。 |
参考以下示例代码,使用公式添加线型迷你图:
// Create a new workbook.
Workbook workbook = new Workbook();
// Get active sheet.
IWorksheet worksheet = workbook.getActiveSheet();
// Add values to the table.
worksheet.getRange("A1").setValue("Sales by Country");
worksheet.getRange("A2:F5").setValue(new Object[][]
{
{"Countries", 2016, 2017, 2018, 2019, 2020},
{"China", 243000, 291000, 465000, 282000, 213000},
{"India", 448000, 358000, 332000, 489000, 302000},
{"UnitedStates", 439000, 276000, 413000, 396000, 392000}
});
worksheet.getRange("G2").setValue("SparkLine");
// Add line sparkline formula.
worksheet.getRange("G3:G5").setFormula("=LINESPARKLINE(B3:F3,1,,,\"{showMarkers:TRUE,lineWeight:1.5,markersColor:#7030a0}\")");
worksheet.getRange("A1:G1").merge();
worksheet.getRange("A1").getInterior().setColor(Color.GetPurple());
worksheet.getRange("A1").getFont().setColor(Color.GetWhite());
worksheet.getRange("A1").setHorizontalAlignment(HorizontalAlignment.Center);
worksheet.getRange("A1:G5").getBorders().setLineStyle(BorderLineStyle.Thin);
worksheet.getRange("B3:F5").setNumberFormat("$#,##0");
worksheet.getRange("A1:G2").getFont().setBold(true);
worksheet.getRange("A1").getFont().setSize(15);
worksheet.getRange("A2:G5").getFont().setSize(13);
worksheet.getRange("A:F").autoFit();
worksheet.getRange("1:5").setRowHeight(25);
worksheet.getRange("G1").setColumnWidth(30);
worksheet.getPageSetup().setOrientation(PageOrientation.Landscape);
// Save as a PDF document.
workbook.save("LineSparkline.pdf");
// Save as a .sjs file.
workbook.save("LineSparkline.sjs");
柱状火迷你图利用条形图来可视化展示数据的分布和变化。正数数据点会位于x轴之上,而负数数据点则会显示在x轴之下。
语法:
= COLUMNSPARKLINE(data,dataOrientation,[dateAxisData],[dateAxisOrientation],[setting])
参数:
参数名称 | 描述 |
---|---|
data | 一个范围引用,代表迷你图的数据,例如 "A1:C3"。 |
dataOrientation | 一个数字,代表迷你图数据的方向。可选如下之一:<ul><li>垂直:0(默认)。</li><li>水平:1。</li></ul> |
dateAxisData | 一个范围引用,代表迷你图日期轴的数据,例如 "D1:F3"。如果没有dateAxisOrientation,则dateAxisData无效。 |
dateAxisOrientation | 一个数字,代表迷你图日期轴的方向。可选如下之一: 1. 垂直 - 0 2. 水平 - 1 |
setting | 一个JSON格式的字符串。格式:全名(缩写)[默认值]:描述 |
设置参数提供了以下区分大小写的属性来设定:
参数名称 | 描述 |
---|---|
showFirst(sf)[默认: False] | 检查迷你图的第一个数据点是否以不同格式显示。 |
showHigh(sh)[默认: False] | 检查最高数值的数据点是否以不同格式显示于迷你图。 |
showLast(slast)[默认: False] | 检查最后一个数据点是否以不同格式显示于迷你图。 |
showLow(slow)[默认: False] | 检查最低数值的数据点是否以不同格式显示于迷你图。 |
showNegative(sn)[默认: False] | 检查负数数据点是否以不同格式显示于迷你图。 |
showMarkers(sm)[默认: False] | 检查迷你图是否显示数据标记。 |
axisColor(ac)[默认: #000000] | 轴的颜色。 |
firstMarkerColor(fmc)[默认: #95B3D7] | 迷你图第一个数据点的颜色。 |
highMarkerColor(hmc)[默认: #0000FF] | 迷你图最高数据点的颜色。 |
lastMarkerColor(lastmc)[默认: #95B3D7] | 迷你图最后一个数据点的颜色。 |
lowMarkerColor(lowmc)[默认: #0000FF] | 迷你图最低数据点的颜色。 |
markersColor(mc)[默认: #244062] | 迷你图数据标记的颜色。 |
negativeColor(nc)[默认: #A52A2A] | 迷你图负数数据点的颜色。 |
seriesColor(sc)[默认: #244062] | 迷你图的颜色。 |
lineWeight(lw)[默认: 1.0] | 表示迷你图的线宽,线宽单位为磅,必须大于等于零。 |
displayXAxis(dxa)[默认: False] | 表示是否显示迷你图的横轴。 |
displayEmptyCellsAs(deca)[默认: 0] | 表示如何显示空单元格。 - 0: 在数据系列中为空值留出间隔,导致线条分段。 - 1: 将数据系列中的空值处理为零值,使得线条在零值数据点处下降到零。 - 2: 用连接元素填充空值的间隔,而不是在数据系列中为空值留出间隔。 |
displayHidden(dh)[默认: False] | 表示隐藏单元格中的数据是否用于绘制迷你图。 |
manualMax(mmax)[默认: 0] | 表示迷你图垂直轴的最大值。如果 maxAxisType 不等于 '自定义(2)',则轴设为零。 |
manualMin(mmin)[默认: 0] | 表示迷你图垂直轴的最小值。如果 minAxisType 不等于 '自定义(2)',则轴设为零。 |
maxAxisType(maxat)[默认: 0] | 表示垂直轴最大值的计算方式。 - 0: 指定迷你图的垂直轴最小值或最大值自动计算,以便可以显示具有最小或最大值的数据点。 - 2: 指定迷你图的垂直轴最小值或最大值由 manualMin 属性或 manualMax 属性指定。 |
minAxisType(minat)[默认: 0] | 表示垂直轴最小值的计算方式,类似于 maxAxisType 类型。 |
rightToLeft(rtl)[默认: False] | 表示迷你图组中的每个迷你图是否以从右向左的方式显示。 |
参考以下示例代码使用公式添加柱状迷你图:
// Create a new workbook.
Workbook workbook = new Workbook();
// Get active sheet.
IWorksheet worksheet = workbook.getActiveSheet();
// Add values to the table.
worksheet.getRange("A1").setValue("Sales Data");
worksheet.getRange("A2:F6").setValue(new Object[][]
{
{"Salesperson", "Jan", "Feb", "Mar", "Apr", "May"},
{"Courtney Graves", 76000, 68250, 72000, 99750, 45500},
{"Crystal Cross", 118750, 89250, 121250, 92500, 60750},
{"Jodi Hall", 75500, 56500, 65500, 62750, 77500},
{"Andrew James", 76750, 108500, 88000, 55750, 106000}
});
worksheet.getRange("G2").setValue("SparkLine");
// Add column sparkline formula.
worksheet.getRange("G3:G6").setFormula("=COLUMNSPARKLINE(B3:F3,1,,,\"{showMarkers:TRUE}\")");
worksheet.getRange("A1:G1").merge();
worksheet.getRange("A1").getInterior().setColor(Color.GetPurple());
worksheet.getRange("A1").getFont().setColor(Color.GetWhite());
worksheet.getRange("A1").setHorizontalAlignment(HorizontalAlignment.Center);
worksheet.getRange("A1:G6").getBorders().setLineStyle(BorderLineStyle.Thin);
worksheet.getRange("B3:F6").setNumberFormat("$#,##0");
worksheet.getRange("A1:G2").getFont().setBold(true);
worksheet.getRange("A1").getFont().setSize(15);
worksheet.getRange("A2:G6").getFont().setSize(13);
worksheet.getRange("A:F").autoFit();
worksheet.getRange("1:6").setRowHeight(25);
worksheet.getRange("G1").setColumnWidth(30);
worksheet.getPageSetup().setOrientation(PageOrientation.Landscape);
// Save as a PDF document.
workbook.save("ColumnSparkline.pdf");
// Save as a .sjs file.
workbook.save("ColumnSparkline.sjs");
盈亏迷你图利用条形图来直观地表示正负值。正值(赢)位于x轴之上,而负值(亏)位于x轴之下。
这种盈亏迷你图支持两种状态的值,例如真或假,或是 1 或 -1。例如,在游戏结果中,1 代表赢,而 -1 代表亏。
语法:
= WINLOSSSPARKLINE(data,dataOrientation,[dateAxisData],[dateAxisOrientation],[setting])
参数:
参数名称 | 描述 |
---|---|
data | 数据范围引用,代表迷你图的数据,例如"A1:C3"。 |
dataOrientation | 一个数字,代表迷你图数据的方向。可选如下之一: 垂直:0(默认) 水平:1 |
dateAxisData | 日期轴数据范围引用,代表迷你图的日期轴数据,例如"D1:F3"。如果没有dateAxisOrientation,则dateAxisData无效。 |
dateAxisOrientation | 一个数字,代表迷你图日期轴的方向。可选如下之一: 垂直:0 水平:1 |
setting | JSON格式的字符串。格式:全名(缩写)[默认值]:描述 |
设置参数提供了以下区分大小写的属性来设定:
参数名称 | 描述 |
---|---|
showFirst(sf)[默认: False] | 检查迷你图的第一个数据点是否以不同格式显示。 |
showHigh(sh)[默认: False] | 检查最高数值的数据点是否以不同格式显示于迷你图。 |
showLast(slast)[默认: False] | 检查最后一个数据点是否以不同格式显示于迷你图。 |
showLow(slow)[默认: False] | 检查最低数值的数据点是否以不同格式显示于迷你图。 |
showNegative(sn)[默认: False] | 检查负数数据点是否以不同格式显示于迷你图。 |
showMarkers(sm)[默认: False] | 检查迷你图是否显示数据标记。 |
axisColor(ac)[默认: #000000] | 轴的颜色。 |
firstMarkerColor(fmc)[默认: #95B3D7] | 迷你图第一个数据点的颜色。 |
highMarkerColor(hmc)[默认: #0000FF] | 迷你图最高数据点的颜色。 |
lastMarkerColor(lastmc)[默认: #95B3D7] | 迷你图最后一个数据点的颜色。 |
lowMarkerColor(lowmc)[默认: #0000FF] | 迷你图最低数据点的颜色。 |
markersColor(mc)[默认: #244062] | 迷你图数据标记的颜色。 |
negativeColor(nc)[默认: #A52A2A] | 迷你图负数数据点的颜色。 |
seriesColor(sc)[默认: #244062] | 迷你图的颜色。 |
lineWeight(lw)[默认: 1.0] | 表示迷你图的线宽,线宽单位为磅,必须大于等于零。 |
displayXAxis(dxa)[默认: False] | 表示是否显示迷你图的横轴。 |
displayEmptyCellsAs(deca)[默认: 0] | 表示如何显示空单元格。 - 0: 在数据系列中为空值留出间隔,导致线条分段。 - 1: 将数据系列中的空值处理为零值,使得线条在零值数据点处下降到零。 - 2: 用连接元素填充空值的间隔,而不是在数据系列中为空值留出间隔。 |
displayHidden(dh)[默认: False] | 表示隐藏单元格中的数据是否用于绘制迷你图。 |
manualMax(mmax)[默认: 0] | 表示迷你图垂直轴的最大值。如果 maxAxisType 不等于 '自定义(2)',则轴设为零。 |
manualMin(mmin)[默认: 0] | 表示迷你图垂直轴的最小值。如果 minAxisType 不等于 '自定义(2)',则轴设为零。 |
maxAxisType(maxat)[默认: 0] | 表示垂直轴最大值的计算方式。 - 0: 指定迷你图的垂直轴最小值或最大值自动计算,以便可以显示具有最小或最大值的数据点。 - 2: 指定迷你图的垂直轴最小值或最大值由 manualMin 属性或 manualMax 属性指定。 |
minAxisType(minat)[默认: 0] | 表示垂直轴最小值的计算方式,类似于 maxAxisType 类型。 |
rightToLeft(rtl)[默认: False] | 表示迷你图组中的每个迷你图是否以从右向左的方式显示。 |
参考以下示例代码使用公式添加盈亏迷你图:
// Create a new workbook.
Workbook workbook = new Workbook();
// Get active sheet.
IWorksheet worksheet = workbook.getActiveSheet();
// Add values to the table.
worksheet.getRange("A1").setValue("Employee Performance");
worksheet.getRange("A2:F5").setValue(new Object[][]
{
{"Team Member", "Wk1", "Wk2", "Wk3", "Wk4", "Wk5"},
{"Pamela Nelson", 5, 1, 7, 5, 8},
{"Gabriel Reed", 1, 2, 4, 2, 9},
{"Christina Robbins", 4, 10, 8, 5, 10}
});
worksheet.getRange("H2").setValue("Target (tasks per week):");
worksheet.getRange("I2").setValue(5);
worksheet.getRange("G2").setValue("SparkLine");
// Add win-loss sparkline formula. Use Formula2 as the formula contains a dynamic array formula (B3:F3-$I$2).
worksheet.getRange("G3:G5").setFormula2("=WINLOSSSPARKLINE(B3:F3-$I$2,1,,,\"{showNegative:TRUE}\")");
worksheet.getRange("A1:G1").merge();
worksheet.getRange("A1").getInterior().setColor(Color.GetPurple());
worksheet.getRange("A1").getFont().setColor(Color.GetWhite());
worksheet.getRange("A1").setHorizontalAlignment(HorizontalAlignment.Center);
worksheet.getRange("A1:G5").getBorders().setLineStyle(BorderLineStyle.Thin);
worksheet.getRange("A1:G2").getFont().setBold(true);
worksheet.getRange("A1").getFont().setSize(15);
worksheet.getRange("A2:G5").getFont().setSize(13);
worksheet.getRange("H2:I2").getFont().setBold(true);
worksheet.getRange("H2:I2").getFont().setSize(13);
worksheet.getRange("A:F").autoFit();
worksheet.getRange("1:5").setRowHeight(25);
worksheet.getRange("G1:H1").setColumnWidth(30);
worksheet.getPageSetup().setOrientation(PageOrientation.Landscape);
// Save as a PDF document.
workbook.save("WinLossSparkline.pdf");
// Save as a .sjs file.
workbook.save("WinLossSparkline.sjs");
注意:
使用 IRange 接口的 getValue 方法获取公式结果会返回代表火花线对象的 ISparkLineObject。ISparkLineObject 接口的 toJson 方法可以返回与该对象相对应的 JSON 字符串。
使用 IRange 接口的 getText 方法获取公式结果会返回一个空字符串。
MS Excel 不支持 SPARKLINE 公式,因此此公式的计算结果会是"#NAME?"。
用户可以导入和导出包含火花线的 JSON 或 .sjs 文件。
GcExcel 支持将火花线公式导出为 PDF、HTML 或图像。
如果公式有误,其结果将是 CalcError.Value。