堆积函数迷你图

堆积函数迷你图通过堆叠条形的方式展示多个数据系列的比例关系,适用于比较不同类别在各维度的数值大小。本 Demo 展示了水平和垂直两种布局方式,帮助用户直观地分析季度销售数据。

概述 本 Demo 展示了如何使用 STACKEDSPARKLINE 函数创建堆积迷你图,通过堆叠条形展示多个数据系列的比例关系。Demo 包含两个工作表:Horizontal 工作表展示水平方向的堆积图,Vertical 工作表展示垂直方向的堆积图,两者使用相同的季度销售数据,但呈现方式不同。 实现思路 创建两个工作表,分别用于展示水平和垂直方向的堆积迷你图 使用 setArray 方法填充季度销售数据(区域、季度、颜色范围等) 使用 setFormula 方法为单元格设置 STACKEDSPARKLINE 公式 水平工作表:使用默认参数,条形水平显示 垂直工作表:设置 vertical 参数为 TRUE,条形垂直显示 调整列宽、行高和样式,隐藏颜色范围列以保持界面整洁 代码解析 设置水平堆积迷你图公式 这段代码为单元格 (2, 6) 设置堆积迷你图公式。参数说明: C3:F3:数据区域,包含 East、West、North、South 四个区域的销售额 $B$3:$B$6:颜色范围,为每个堆叠段指定颜色(使用绝对引用) $C$2:$F$2:标签范围,显示区域名称(使用绝对引用) 170000:最大值,所有堆叠段的总和 设置垂直堆积迷你图公式 这段代码展示了垂直布局的实现方式。关键区别: 数据区域使用列引用 B$4:B$7(纵向数据) 颜色范围使用季度颜色 $B$3:$E$3 标签范围使用区域名称 $A$4:$A$7 最后一个参数设置为 TRUE,启用垂直显示模式 运行效果 Horizontal 工作表:每行显示一个季度的水平堆积条,四个区域(East、West、North、South)的销售额堆叠显示,不同颜色区分各区域 Vertical 工作表:每列显示一个季度的垂直堆积条,条形从下往上堆叠,适合纵向对比 两个工作表使用相同的销售数据,但通过不同的布局方式展示,用户可对比查看效果 颜色范围列(B 列)在水平视图中被隐藏,保持界面整洁 API 参考 STACKEDSPARKLINE 函数 主要参数: points:数据区域,必需参数 colorRange:颜色区域引用,可选 labelRange:标签区域引用,可选 maximum:迷你图最大值,可选 vertical:是否垂直显示,布尔值,默认 false setFormula 方法 row、col:单元格位置 value:公式字符串 sheetArea:可选,指定表单区域
var spreadNS = GC.Spread.Sheets; window.onload = function () { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 }); initSpread(spread); }; function initSpread(spread) { spread.options.newTabVisible = false; initHorizontalSparkline(spread.sheets[0], "Horizontal"); initVerticalSparkline(spread.sheets[1], "Vertical"); }; function initHorizontalSparkline(sheet, name) { sheet.suspendPaint(); sheet.name(name); sheet.addSpan(0, 0, 1, 7); sheet.getCell(0, 0).value("Quarterly Sales by Regions 2020").font("20px Arial").vAlign(spreadNS.VerticalAlign.center); for (var i = 0; i < 7; i++) { sheet.getCell(1,i).backColor("#E3E3E3"); sheet.setColumnWidth(i, 90); sheet.setFormatter(-1, i, "$#,##0"); } sheet.setArray(1, 0, [ ["Quarter", "Color Range","East", "West", "North","South","Diagram"], ["Q1","#82BC00", 42000,45000,26000,38000], ["Q2","#AED069", 52000,35000,45000,20000], ["Q3","#D4E3AF", 25000,34000,55000,19000], ["Q4","#F4F8EB", 50000,25000,60000,20000]]); sheet.setFormula(2, 6, '=STACKEDSPARKLINE(C3:F3,$B$3:$B$6,$C$2:$F$2,170000)'); sheet.setFormula(3, 6, '=STACKEDSPARKLINE(C4:F4,$B$3:$B$6,$C$2:$F$2,170000)'); sheet.setFormula(4, 6, '=STACKEDSPARKLINE(C5:F5,$B$3:$B$6,$C$2:$F$2,170000)'); sheet.setFormula(5, 6, '=STACKEDSPARKLINE(C6:F6,$B$3:$B$6,$C$2:$F$2,170000)'); sheet.setFormula(6, 6, '=STACKEDSPARKLINE(C7:F7,$B$3:$B$6,$C$2:$F$2,170000)'); sheet.setRowHeight(0, 30); sheet.setRowHeight(1, 25); for (var i = 2; i < 6; i++) { sheet.setRowHeight(i, 30); } sheet.setColumnWidth(6, 250); //hide Color Range column sheet.setColumnWidth(1, 0); sheet.resumePaint(); } function initVerticalSparkline(sheet, name) { sheet.suspendPaint(); sheet.name(name); sheet.addSpan(0, 0, 1, 5); sheet.getCell(0, 0).value("Quarterly Sales by Regions 2020").font("20px Arial").vAlign(spreadNS.VerticalAlign.center); for (var i = 0; i < 5; i++) { sheet.getCell(1,i).backColor("#E3E3E3"); sheet.setColumnWidth(i, 90); sheet.setFormatter(-1, i, "$#,##0"); } sheet.setArray(1, 0, [ ["Quarter", "Q1", "Q2", "Q3","Q4"], ["Color Range", "#82BC00","#AED069","#D4E3AF","#F4F8EB"], ["East",42000,52000,25000,50000], ["West",45000,35000,34000,25000], ["North",26000,45000,55000,60000], ["South",38000,20000,19000,20000]]); sheet.setFormula(7, 1, '=STACKEDSPARKLINE(B$4:B$7,$B$3:$E$3,$A$4:$A$7,170000,,,,,,,TRUE)'); sheet.setFormula(7, 2, '=STACKEDSPARKLINE(C$4:C$7,$B$3:$E$3,$A$4:$A$7,170000,,,,,,,TRUE)'); sheet.setFormula(7, 3, '=STACKEDSPARKLINE(D$4:D$7,$B$3:$E$3,$A$4:$A$7,170000,,,,,,,TRUE)'); sheet.setFormula(7, 4, '=STACKEDSPARKLINE(E$4:E$7,$B$3:$E$3,$A$4:$A$7,170000,,,,,,,TRUE)'); sheet.setFormula(7, 5, '=STACKEDSPARKLINE(F$4:F$7,$B$3:$E$3,$A$4:$A$7,170000,,,,,,,TRUE)'); for (var i = 0; i < 7; i++) { sheet.setRowHeight(i, 30); } sheet.setRowHeight(2, 0); sheet.setRowHeight(7, 180); sheet.resumePaint(); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta name="spreadjs culture" content="zh-cn" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" style="width:100%;height:100%"></div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }