简介

动态数组用于替换数组公式。 任何可能返回多个结果的公式都可以称为动态数组公式。 当前返回多个结果并成功溢出的公式可以称为溢出数组公式。

在下面的示例中,C3中的值溢出到相邻的单元格中。 但是,C9中的值将显示#SPILL!错误,因为该区域内存在阻止溢出的单元格。

<p>用户可以通过以下两种方式之一启用动态数组相关功能:</p> <pre><code class="hljs"><span class="hljs-comment">// 1st way:</span> var workbook = <span class="hljs-keyword">new</span> GC.Spread.Sheets.<span class="hljs-constructor">Workbook(<span class="hljs-params">document</span>.<span class="hljs-params">getElementById</span>(<span class="hljs-string">"ss"</span>)</span>, { sheetCount: <span class="hljs-number">3</span>, allowDynamicArray: <span class="hljs-literal">true</span>}); <span class="hljs-comment">// 2rd way:</span> var workbook = <span class="hljs-keyword">new</span> GC.Spread.Sheets.<span class="hljs-constructor">Workbook(<span class="hljs-params">document</span>.<span class="hljs-params">getElementById</span>(<span class="hljs-string">"ss"</span>)</span>); workbook.options.allowDynamicArray = <span class="hljs-literal">true</span>; </code></pre> <p>溢出(Spill)表示公式已生成多个值, 并且这些值已放置在相邻的单元格中。</p> <p>动态数组具有七个函数:</p> <ul> <li>FILTER 函数: 根据定义的条件过滤一系列数据。</li> <li>RANDARRAY 函数: 返回随机数数组。</li> <li>SEQUENCE 函数: 生成一系列连续数字,例如 1, 2, 3, 4。</li> <li>SORT 函数: 对区域或数组的内容进行排序。</li> <li>SORTBY 函数: 根据相应区域或数组中的值对区域或数组的内容进行排序。</li> <li>UNIQUE 函数: 返回列表或区域中的唯一值列表。 </li> <li>绝对交集运算符 @: 使用称为隐式交集逻辑返回一个值。</li> </ul> <p>溢出区域运算符(#)可以引用整个溢出区域:</p> <ul> <li>在处理溢出数组函数时,可以通过将溢出区域运算符(#)放在区域之后来引用整个溢出区域。</li> </ul> <p>当公式返回多个值而由于以下任何原因无法在表单中显示结果时,将返回<code>#SPILL</code>错误:</p> <ol> <li>溢出数组公式的溢出区域不为空。</li> <li>SpreadJS无法确定溢出数组的大小, 因为它是可变的, 并且在计算传递之间调整大小。</li> <li>所尝试输入的溢出数组公式将超出工作表的区域。</li> <li>表格不支持溢出的数组公式。</li> <li>尝试输入的溢出数组公式导致内存不足。</li> <li>溢出的数组公式溢出到合并的单元格中。</li> <li>无法识别或无法处理的错误。</li> </ol> <p>当满足以下任一条件时,将返回<code>#CALC!</code>错误:</p> <ol> <li>计算数组中的数组。</li> <li>数组只能包含数字,字符串,错误,布尔值或链接的数据类型。 不支持区域引用。</li> <li>返回一个空集。</li> <li>计算引擎遇到数组未指定的计算错误。</li> </ol>
window.onload = function () { var spread = new GC.Spread.Sheets.Workbook(_getElementById("ss")); initSpread(spread); }; function initSpread(spread) { spread.options.allowDynamicArray = true; var sheet = spread.getActiveSheet(); spread.suspendPaint(); spread.suspendCalcService(); sheet.setValue(1, 2, "=SEQUENCE(3,3)"); sheet.setFormula(2, 2, 'SEQUENCE(3,3)'); sheet.setValue(7, 2, "=SEQUENCE(3,3)"); sheet.setFormula(8, 2, 'SEQUENCE(3,3)'); sheet.setValue(9, 3, 3); bindEvent(spread, sheet); spread.resumeCalcService(); spread.resumePaint(); } function bindEvent (spread, sheet) { _getElementById("allowDynamicArray").addEventListener('change', function () { spread.options.allowDynamicArray = this.checked; sheet && sheet.recalcAll(true); }); } function _getElementById(id) { return document.getElementById(id); }
<!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/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity/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" class="sample-spreadsheets"></div> <div class="options-container"> <div class="option-row"> <input style="width: 20px;float: left;" type="checkbox" id="allowDynamicArray" checked="checked"/> <label for="allowDynamicArray">Allow DynamicArray</label> </div> </div> </div></body> </html>
.sample { position: relative; height: 100%; overflow: auto; } .sample::after { display: block; content: ""; clear: both; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .option-row { font-size: 14px; padding: 5px; margin-top: 10px; } .option-group { margin-bottom: 6px; } label { display: block; margin-bottom: 6px; } input { margin-bottom: 5px; padding: 2px 4px; width: 100%; box-sizing: border-box; } input[type=button] { margin-bottom: 6px; } hr { border-color: #fff; opacity: .2; margin: 5px 0; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }