[]
        
(Showing Draft Content)

SpreadJS 迷你图

除了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)");
}

线型迷你图

线条型火花图展示了任何开支或数据的趋势,着重强调变化和波动。

image

语法:

= LINESPARKLINE(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("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轴之下。

image

语法:

 = 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 代表亏。

image

语法:

 = 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。