概述
本 Demo 展示了 SpreadJS 支持的 7 大类基础形状类型,每个类别显示在一个独立的工作表中。通过这个 Demo,可以直观了解 SpreadJS 提供的丰富形状类型,包括矩形、基础形状、箭头、公式符号、流程图、星形和标注。
实现思路
定义形状分类数组,包含每个类别的形状类型列表和描述
创建 7 个工作表,每个工作表对应一个形状类别
使用 suspendPaint 和 resumePaint 优化性能
遍历每个类别的形状类型,在工作表中以网格布局添加形状
为每个形状添加类型名称标签
代码解析
定义形状类别
Demo 定义了一个包含 7 个形状类别的数组,每个类别包含形状类型列表和类别名称。
批量添加形状
这段代码遍历形状类型数组,使用 sheet.shapes.add() 方法添加形状。形状以网格方式排列,每行 4 个,每个形状大小为 150x150 像素。使用 GC.Spread.Sheets.Shapes.AutoShapeType[shapeName] 动态获取形状类型枚举值,sheet.setText() 在形状下方添加类型名称标签。
性能优化
使用 suspendPaint() 暂停渲染,批量操作完成后再调用 resumePaint() 恢复渲染,可以显著提升性能。
运行效果
Demo 创建了 7 个工作表标签:Rectangles、Basic Shapes、Block Arrows、Equation Shapes、Flowchart、Stars and Banners、Callouts
每个工作表展示了该类别的多种形状,以网格方式排列
每个形状下方标注了其类型名称
可以点击不同的工作表标签查看不同类别的形状
API 参考
shapes.add() 方法
name: 形状的名称
autoShapeType: 形状类型枚举值,来自 GC.Spread.Sheets.Shapes.AutoShapeType
left、top: 形状左上角的坐标位置
width、height: 形状的宽度和高度
window.onload = function () {
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {sheetCount: 7});
initSpread(spread);
};
function initSpread(spread) {
var shapeCategory = [
{
type: ['rectangle',
'roundedRectangle',
'snip1Rectangle',
'snip2SameRectangle',
'snip2DiagRectangle',
'snipRoundRectangle',
'round1Rectangle',
'round2SameRectangle',
],
desc: "Rectangles",
},
{
type: ['oval', 'hexagon', 'cube', 'smileyFace', 'heart', 'gear9', 'actionButtonMovie', 'funnel'],
desc: "Basic Shapes",
},
{
type: [
'rightArrow',
'leftArrow',
'upArrow',
'downArrow',
'leftRightArrow',
'upDownArrow',
'quadArrow',
'leftRightUpArrow',
],
desc: "Block Arrows",
}, {
type: [
'mathPlus',
'mathMinus',
'mathMultiply',
'mathDivide',
'mathEqual',
'mathNotEqual'],
desc: "Equation Shapes",
}, {
type: [
'flowchartProcess',
'flowchartAlternateProcess',
'flowchartDecision',
'flowchartData',
'flowchartPredefinedProcess',
'flowchartInternalStorage',
'flowchartDocument',
'flowchartMultidocument',
],
desc: "Flowchart",
}, {
type: [
'shape8pointStar',
'explosion2',
'shape4pointStar',
'shape5pointStar',
'star6Point',
'star7Point',
'shape8pointStar',
'star10Point',
],
desc: "Stars and Banners",
}, {
type: [
'rectangularCallout',
'roundedRectangularCallout',
'ovalCallout',
'cloudCallout',
'lineCallout2',
'lineCallout3',
'lineCallout4',
'lineCallout2AccentBar',
],
desc: "Callouts",
}];
spread.suspendPaint();
var sheets = spread.sheets;
for (var i = 0; i < shapeCategory.length; i++) {
var sheet = sheets[i];
initSheet(sheet, shapeCategory[i].desc);
initShape(sheet, shapeCategory[i].type);//add shape
}
spread.options.tabStripRatio = 0.8;
spread.resumePaint();
}
function initSheet(sheet, sheetName) {
sheet.name(sheetName);
}
function initShape(sheet, shapeType) {
let left = 50, top = 50, tempX = 0, tempY = 0, tempShape = null, shapeName, row = 1, column = 1;
for(let i = 0, len = shapeType.length ; i < len; i++) {
shapeName = shapeType[i];
if(GC.Spread.Sheets.Shapes.AutoShapeType[shapeName]){
tempShape = sheet.shapes.add(shapeName, GC.Spread.Sheets.Shapes.AutoShapeType[shapeName], left + tempX * 180, top + tempY, 150, 150);
tempX ++;
sheet.setText(row,column,shapeName);
column = column+3;
if(tempX === 4) {
tempX = 0;
tempY += 200;
column = 1;
row = 11;
}
}
}
}
<!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-shapes/dist/gc.spread.sheets.shapes.min.js"
type="text/javascript"></script>
<script src="$DEMOROOT$/spread/source/js/license.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="app.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div class="sample-tutorial">
<div id="ss" class="sample-spreadsheets"></div>
</div>
</body>
</html>
.sample-tutorial {
position: relative;
height: 100%;
overflow: hidden;
}
.sample-spreadsheets {
width: 100%;
height: 100%;
overflow: hidden;
float: left;
}
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}