[]
        
(Showing Draft Content)

구조화된 참조 수식

SpreadJS는 표에서 구조화된 참조 수식을 지원합니다.

구조화된 참조 수식은 표의 셀 범위를 참조하기 위해 키워드와 표의 열 이름을 사용합니다.

다음 이미지는 구조화된 참조의 구성 요소를 보여주며, 이 수식은 총 판매 금액과 세금을 더하는 기능을 수행합니다.


  1. 표 이름은 실제 표 데이터를 참조하기 위해 사용자가 지정한 의미 있는 이름입니다(머리글 행과 요약 행 제외).

  2. 열 지정자는 열 머리글에서 유래하며 대괄호로 묶입니다. 열 지정자는 열 데이터(머리글 행 및 요약 행 제외)를 참조합니다.

  3. 특수 항목 지정자는 표의 특정 부분(예: 합계 행)을 참조하는 데 사용할 수 있습니다.

  4. 표 지정자는 표 이름 뒤에 대괄호로 묶인 구조화된 참조의 외부 부분입니다.

  5. 구조화된 참조는 표 이름으로 시작하여 표 지정자로 끝나는 전체 문자열입니다.

사용자는 수식에서 더 쉽게 참조할 수 있도록 다양한 표 영역을 참조하는 특수 항목을 사용할 수 있습니다. 아래 표는 구조화된 참조에서 사용할 수 있는 특수 항목 지정자를 나열합니다:

특수 항목

예제

참조 대상

셀 범위

#All

=DeptSales[#All]

열 머리글, 데이터, 합계 포함 전체 표

A1:E8

#Data

=DeptSales[#Data]

데이터만

A2:E7

#Headers

=DeptSales[#Headers]

머리글 행

A1:E1

#Totals

=DeptSales[#Totals]

요약 행 (없으면 null 반환)

A8:E8

#This Row

=DeptSales[#This Row]

현재 행의 열 부분

A5:E5 (현재 행이 5일 경우)

"#This Row" 항목은 약어로 "@"를 사용할 수 있습니다. 예: =DeptSales[#This Row]는 =DeptSales[@]와 동일합니다.

"#Data" 항목은 "#Headers" 또는 "#Totals"와 함께 사용할 수 있습니다. 아래 표는 예시를 나열합니다:

특수 항목

예제

참조 대상

셀 범위

#Headers 및 #Data

=DeptSales[[#Headers], [#Data]]

열 머리글 및 데이터

A1:E7

#Data 및 #Totals

=DeptSales[[#Data], [#Totals]]

데이터 및 요약 행

A2:E8

특수 항목이 명시되지 않은 경우, 기본적으로 데이터로 처리됩니다. 예:

특수 항목

예제

참조 대상

셀 범위

없음

=DeptSales[] 또는 =DeptSales

데이터

A2:E7

열 지정자는 열 머리글과 합계를 제외한 전체 데이터 열을 참조합니다. 다음 표는 열 지정자 예시입니다:

열 지정자

예제

참조 대상

셀 범위

단일 열

=DeptSales[SaleAmt]

"SaleAmt" 열의 데이터

C2:C7

열 범위

=DeptSales[[SaleAmt]:[TaxAmt]]

"SaleAmt"에서 "TaxAmt"까지의 열 범위

C2:E7

없음

=DeptSales[[#Data]]

모든 열의 데이터

A2:E8

모든 표, 열, 특수 항목 지정자는 대괄호 ([ ])로 묶어야 합니다. 내부에 다른 지정자가 포함된 지정자의 경우, 내부 대괄호를 감싸기 위해 외부 대괄호도 필요합니다. 정책 충돌 시 우선 순위는 다음과 같습니다.


대괄호 관련 규칙:

  1. 지정자가 없으면 표 지정자의 대괄호는 생략할 수 있습니다. 예: "=DeptSales[]"는 "=DeptSales"와 동일합니다.

  2. 특수 항목 또는 단일 열 지정자만 있을 경우, 표 지정자의 대괄호는 생략할 수 있습니다. 예: "=DeptSales[[#Data]]"는 "=DeptSales[#Data]"와 같고, "=DeptSales[[TaxAmt]]"는 "=DeptSales[TaxAmt]"와 같습니다.

  3. 열 지정자나 특수 항목이 조합된 경우, 특수 항목은 반드시 대괄호로 묶어야 합니다. 예: "=DeptSales[#Data, [TaxAmt]]" 및 "=DeptSales[#Data, #Totals]"는 허용되지 않습니다.

  4. 표 열 머리글에 다음 특수 문자가 포함된 경우 전체 머리글은 대괄호로 묶어야 합니다: 공백, 탭, 줄 바꿈, 캐리지 리턴, 쉼표(,), 콜론(:), 마침표(.), 대괄호([, ]), 해시(#), 홑따옴표('), 큰따옴표("), 중괄호({, }), 달러 기호($), 캐럿(^), 앰퍼샌드(&), 별표(*), 더하기(+), 등호(=), 마이너스(-), 부등호(>, <), 나눗셈(/). 예: 열 이름이 "#column1"인 경우 "=Table1[#column1]"은 허용되지 않으며 "=Table1['#column1']"로 작성해야 합니다.

  5. 열 범위 지정자가 있는 경우, 하나 이상의 열 지정자는 반드시 대괄호로 묶어야 합니다. 예: "=Table1[column1:column2]"는 허용되지 않으며, "=Table1[[column1]:column2]" 또는 "=Table1[column1:[column2]]" 또는 "=Table1[[column1]:[column2]]"와 같이 작성해야 합니다.

  6. '@' 특수 항목의 대괄호는 생략할 수 있습니다. 예: "=DeptSales[@, TaxAmt]"는 "=DeptSales[[@], TaxAmt]"와 동일합니다.

기타 일반 규칙:

  1. 모든 표, 열, 특수 항목 지정자는 대소문자를 구분하지 않습니다.

  2. 다음 문자는 특수 의미를 가지므로 홑따옴표(')로 이스케이프 처리해야 합니다: 대괄호([, ]), 해시(#), 홑따옴표('). 예: "=Table1[colu#mn1]"은 허용되지 않으며 "=Table1[colu'#mn1]"처럼 작성해야 합니다.

  3. 특수 항목 및 열 지정자는 쉼표(,)로 구분해야 합니다. 예: "=DeptSales[[#Data], [#Totals], TaxAmt]".

  4. 특수 항목과 열 지정자의 순서는 관계없습니다. 예: "=DeptSales[[#Data], [#Totals], TaxAmt]"는 "=DeptSales[[#Totals], TaxAmt, [#Data]]"와 동일합니다.

  5. '@' 특수 항목 뒤의 쉼표는 생략할 수 있습니다. 예: "=DeptSales[@, TaxAmt]"는 "=DeptSales[@TaxAmt]"와 동일합니다.

setColumnDataFormulasetColumnFormula 메서드를 사용하여 표 내 수식에 구조화된 참조를 추가할 수 있습니다. 또한 표 외부 영역의 수식에서도 표 데이터를 참조할 수 있습니다. 예: activeSheet.getCell(7,1).formula("SUM(Table1[SubTotal])");. 마지막으로 설정된 수식이 열 수식과 셀 수식 간 우선 순위를 갖습니다.

참고: 수식 내 열 지정자는 머리글과 바닥글의 셀에는 적용되지 않습니다.



다음 코드 샘플은 표를 생성하고 구조화된 참조 수식을 사용하여 합계를 계산하는 방법을 보여줍니다.

Ask ChatGPT

activeSheet.tables.add("Table1", 0, 0, 4, 3, GC.Spread.Sheets.Tables.TableThemes.dark1);
activeSheet.getCell(0,0).text("Value1");
activeSheet.getCell(0,1).text("Value2");
activeSheet.getCell(0,2).text("SubTotal");
activeSheet.getCell(1,0).text("1");
activeSheet.getCell(2,0).text("2");
activeSheet.getCell(3,0).text("3");
activeSheet.getCell(1,1).text("5");
activeSheet.getCell(2,1).text("5");
activeSheet.getCell(3,1).text("5");
var sTable = activeSheet.tables.findByName("Table1").setColumnDataFormula(2, "=[Value1]\*[Value2]");
sTable.showFooter(true);
//요약 행 값 설정
sTable.setColumnValue(0, "Total");
sTable.setColumnFormula(2, "SUM(Table1[SubTotal])");
activeSheet.getColumn(0).width(80);
activeSheet.getColumn(1).width(80);
activeSheet.getColumn(2).width(80);
//activeSheet.getCell(7,1).formula("SUM(Table1[SubTotal])");