基础形状类型

SpreadJS 提供 182 种内置形状类型,涵盖矩形、基础形状、箭头、公式符号、流程图、星形和标注等多个类别。本 Demo 展示了如何通过代码在工作表中添加不同类别的形状,帮助开发者了解 SpreadJS 支持的形状种类。

这些形状可以用于创建流程图、组织结构图、数据可视化图表等需要图形元素的报表和文档。

概述 本 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; }