SCAN

The SCAN function scans an array by applying a LAMBDA to each value and returns an array that has each intermediate value.

Syntax The SCAN function syntax has the following arguments and parameters: initial_value Sets the starting value for the accumulator. array An array to be scanned. lambda A LAMBDA that is called to scan the array. The LAMBDA takes two parameters: accumulator The value totaled up and returned as the final result. value The calculation applied to each element in the array. Tip Before using this function, you need to turn on the allowDynamicArray option Basic Usage Create a list of factorials
var data = { values: { 1: { 1: "Examples:" }, 3: { 1: "Example 1: Create a list of factorials" }, 4: { 1: "Data:", 5: "Formula:" }, 5: { 1: 1, 2: 2, 3: 3, 5: "Result:" }, 6: { 1: 4, 2: 5, 3: 6 }, 8: { 1: "Example 2: Concatenate characters in an array" }, 9: { 1: "Data:", 5: "Formula:" }, 10: { 1: "a", 2: "b", 3: "c", 5: "Result:" }, 11: { 1: "d", 2: "e", 3: "f" }, }, formulas: { 4: { 6: "FORMULATEXT(G6)" }, 5: { 6: "SCAN(1,B6:D7,LAMBDA(a,b,a*b))" }, 9: { 6: "FORMULATEXT(G11)" }, 10: { 6: 'SCAN("",B11:D12,LAMBDA(a,b,a&b))' }, }, cellStyles: { "B2:C2": 0, "B4:E4": 1, B5: 2, C5: 3, D5: 4, F5: 5, "G5:I7": 6, "B6:D7": 7, F6: 8, "B9:E9": 1, B10: 2, C10: 3, D10: 4, F10: 5, "G10:I12": 6, "B11:D12": 7, F11: 8, }, styles: { records: [ { foreColor: 0, font: 0, border: [null, null, 0] }, { foreColor: 0, font: 1, border: [null, null, 1] }, { backColor: 2, foreColor: 1, font: 1, border: [null, null, 2, 3] }, { backColor: 2, foreColor: 1, font: 1, border: [4, null, 2] }, { backColor: 2, foreColor: 1, font: 1, border: [4, 3, 2] }, { backColor: 2, foreColor: 1, font: 1, border: [3, 2, 3, 3] }, { backColor: 4, foreColor: 3, font: 1, border: [2, 2, 2, 2] }, { backColor: 6, foreColor: 5, border: [2, 2, 2, 2] }, { backColor: 2, foreColor: 1, font: 1, border: [3, 3, 3, 3] }, ], borders: [ { color: "#accdea", style: 5 }, { color: "#9bc3e6", style: 2 }, { color: "#7f7f7f", style: 1 }, { color: "#9bc3e6", style: 1 }, { color: "#000000", style: 1 }, ], colors: ["#44546a", "#ffffff", "#5b9bd5", "#fa7d00", "#f2f2f2", "#3f3f76", "#ffcc99"], fonts: ["700 17.3px Calibri", "700 14.7px Calibri"], }, others: { columnWidth: { 0: 30, 6: 80, 7: 80, 8: 80 }, rowHeight: { 1: 24, 2: 21, 3: 21, 8: 21 }, spans: ["B5:D5", "B10:D10"], }, }; window.onload = function () { var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); workbook.options.allowDynamicArray = true; workbook.suspendPaint(); initSheet1(workbook.getSheet(0)); workbook.resumePaint(); }; function initSheet1(sheet) { setSheetPr(sheet); setCells(sheet); } function setCells(sheet) { foreachObj(data.values, function (r, row) { foreachObj(row, function (c, v) { setValue(sheet, Number(r), Number(c), v); }); }); foreachObj(data.formulas, function (r, row) { foreachObj(row, function (c, v) { setFormula(sheet, Number(r), Number(c), v); }); }); foreachObj(data.cellStyles, function (ref, id) { setStyle(sheet, ref, data.styles.records[id]); }); } function setValue(sheet, r, c, v) { if (v === undefined || v === null) return; sheet.setValue(r, c, v); } function setFormula(sheet, r, c, v) { if (v === undefined || v === null) return; sheet.setFormula(r, c, v); } function setStyle(sheet, ref, v) { if (v === undefined || v === null) return; var styles = data.styles; var range = sheet.getRange(ref); var foreColor = styles.colors[v.foreColor]; var backColor = styles.colors[v.backColor]; var font = styles.fonts[v.font]; var wordWrap = v.wordWrap; if (foreColor) { range.foreColor(foreColor); } if (backColor) { range.backColor(backColor); } if (font) { range.font(font); } if (wordWrap) { range.wordWrap(wordWrap); } var border = v.border || []; var borderTop = styles.borders[border[0]]; var borderRight = styles.borders[border[1]]; var borderBottom = styles.borders[border[2]]; var borderLeft = styles.borders[border[3]]; if (borderTop) { range.borderTop(createLineStyle(borderTop)); } if (borderBottom) { range.borderBottom(createLineStyle(borderBottom)); } if (borderLeft) { range.borderLeft(createLineStyle(borderLeft)); } if (borderRight) { range.borderRight(createLineStyle(borderRight)); } } function setSheetPr(sheet) { // set column width foreachObj(data.others.columnWidth, function (index, v) { sheet.setColumnWidth(Number(index), v); }); // set row height foreachObj(data.others.rowHeight, function (index, v) { sheet.setRowHeight(Number(index), v); }); // set spans var spans = data.others.spans || []; for (var i = 0; i < spans.length; i++) { var range = sheet.getRange(spans[i]); sheet.addSpan(range.row, range.col, range.rowCount, range.colCount); } } function createLineStyle(v) { return new GC.Spread.Sheets.LineBorder(v.color, v.style); } function foreachObj(obj, func) { if (!obj) return; var keys = Object.keys(obj); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var v = obj[key]; func(key, v); } }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.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" class="sample-spreadsheets"></div> </div> </body> </html>
input[type="text"] { width: 200px; margin-right: 20px; } label { display: inline-block; width: 110px; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; } label { display: block; margin-bottom: 6px; } input { padding: 4px 6px; } input[type=button] { margin-top: 6px; display: block; width:216px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } code { border: 1px solid #000; }