소개

동적 배열은 배열 수식을 바꾸는 데 사용됩니다. 여러 결과를 반환할 가능성이 있는 수식을 동적 배열 수식이라고 할 수 있습니다. 현재 여러 결과를 반환하고 성공적으로 유출되고 있는 수식을 유출된 배열 수식이라고 할 수 있습니다.

다음 예제에서 C3의 값은 인접한 셀로 유출됩니다. 그러나 유출을 방지하는 범위에 기존 값이 있으므로 C9의 값은 #SPILL! 오류를 표시합니다.

사용자는 다음 두 가지 방법 중 하나로 동적 배열 함수를 활성화할 수 있습니다. 유출은 수식이 여러 값을 반환했고 해당 값이 인접한 셀로 ‘유출’됨을 의미합니다. 동적 배열에는 7개 함수가 있습니다. * FILTER 함수: 정의한 조건에 따라 데이터 범위를 필터링합니다. * RANDARRAY 함수: 난수 배열을 반환합니다. * SEQUENCE 함수: 일련 번호 목록을 배열로 생성합니다(예: 1, 2, 3, 4). * SORT 함수: 범위 또는 배열의 콘텐츠를 정렬합니다. * SORTBY 함수: 해당 범위 또는 배열의 값을 기준으로 범위 또는 배열의 콘텐츠를 정렬합니다. * UNIQUE 함수: 고유 값 목록을 목록 또는 범위로 반환합니다. * 암시적 교차 연산자 @: 암시적 교차라고 하는 로직을 사용하여 단일 값을 반환합니다. 유출 범위 연산자 #은 전체 유출 범위를 참조할 수 있습니다. * 유출된 배열 함수를 처리하는 경우 범위 뒤에 유출된 범위 연산자(#)를 배치하여 전체 유출 범위를 참조할 수 있습니다. 수식이 다음과 같은 이유로 스프레드시트에 결과를 표시할 수 없는 여러 값을 반환하는 경우 #SPILL 오류가 반환됩니다. 유출된 배열 수식의 유출 범위가 비어 있지 않습니다. 휘발성이며 계산 패스 간에 크기가 조정되므로 유출된 배열의 크기를 결정할 수 없습니다. 입력하려는 유출된 배열 수식이 워크시트 범위를 넘어 확장됩니다. 표에 유출된 배열 수식이 있습니다. 입력하려는 유출된 배열 수식으로 인해 메모리가 부족하게 되었습니다. 유출된 배열 수식이 병합된 셀로 유출됩니다. 수식이 인식 또는 조정될 수 없습니다. 다음 결과에 해당하는 경우 #CALC! 오류가 반환됩니다. 1. 배열 내에서 배열을 계산합니다. 배열에는 숫자, 문자열, 오류, 부울 또는 연결된 데이터 형식만 포함할 수 있습니다. 범위 참조는 지원되지 않습니다. 빈 집합을 반환합니다. 계산 엔진이 배열에서 지정되지 않은 계산 오류를 발견합니다.
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="ko-kr"/> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/ko/purejs/node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/ko/purejs/node_modules/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ko/purejs/node_modules/@grapecity/spread-sheets-resources-ko/dist/gc.spread.sheets.resources.ko.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; }