HotXLS 문서

컨텍스트 기반 수식 평가

클래식 XLS 및 XLSX 워크시트는 1부터 시작하는 지정한 행과 열에 입력된 것처럼 수식 텍스트를 평가하는 동일한 읽기 전용 API를 노출합니다

1회성 평가

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString): TXLSFormulaEvaluationResult; overload;

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle;
  const Options: TXLSFormulaEvaluationOptions): TXLSFormulaEvaluationResult; overload;
워크시트는 로컬 이름, 한정되지 않은 참조, 표 및 외부 링크 컨텍스트를 제공하며 활성 시트, 선택 영역, 셀 모델, 수식 캐시, 더티 상태 또는 종속성 그래프는 변경하지 않습니다
xlfrsA1 은 절대 참조와 혼합 참조를 유지하면서 상대 참조를 대상 셀에서 해석하고, xlfrsR1C1 은 상대 오프셋을 해당 대상에서 직접 해석합니다
명시적 참조가 없는 CELL은 지정된 대상 셀을 검사합니다. 어느 대상에서든 고정된 첫 셀을 검사하려면 $A$1을 쓰고, A1은 A1 컨텍스트 규약에 따라 해당 대상 기준으로 해석됩니다
모델 기반 CELL 메타데이터와 INFO("recalc")는 읽기 전용 통합 문서 뷰를 통해서도 동작하며 세대나 저장된 수식 캐시는 바꾸지 않습니다. CELL("width",reference)는 한 행 두 열짜리 배열을 그대로 유지하고, 분류되지 않은 사용자 지정 형식은 엉뚱한 형식 코드를 지어내는 대신 xlfeUnsupportedFunction을 반환합니다. 전체 헤드리스 및 로캘 경계는 CELL 및 INFO 메타데이터를 참고하세요

형식화된 결과

FORMULATEXT는 워크시트 엔진과 읽기 전용 뷰 양쪽에서 저장된 수식 메타데이터를 검사하며 검사 대상 수식은 계산하지 않습니다. GETPIVOTDATA는 로컬 피벗 테이블 기존 캐시의 분리된 스냅샷을 평가하고 평가 예산과 취소를 존중합니다. 보이는 집계가 빠지면 형식화된 #REF! 값이 그대로 남고, 불완전하거나 지원되지 않는 피벗 모델은 xlfeUnsupportedFunction을 반환합니다. 저장·배열·캐시 경계는 수식 텍스트 검사와 표시되는 피벗 데이터를 참고하세요
TXLSFormulaEvaluationResult 는 Status, 원래 형식화된 Value, IsVolatile및 상태, 네이티브 코드, 메시지를 포함하는 안정적인 Issue 레코드를 반환합니다
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
Formula values such as #DIV/0!, #REF!같은 수식 값, 빈 문자열, 배열, 부울 값 및 날짜는 구별 가능한 값으로 유지됩니다. 구문 분석 실패, 지원되지 않는 함수, 순환 참조, 거부된 외부 참조, 거부된 안전하지 않은 콜백, 취소, 잘못된 인수, 사용할 수 없는 워크시트 및 리소스 소진에는 명시적인 API 상태가 사용됩니다 Issue.NativeCode 는 하위 엔진 오류 코드를 담고 Issue.Message the human-readable description when Status is not xlfeOk

재사용 가능한 불변 템플릿

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
템플릿은 앵커에서 수식을 한 번 컴파일하고 다른 대상 셀에서 반복 평가를 위한 EvaluateAt 및 EvaluateAtWithOptions 를 노출합니다
일반 A1 및 R1C1 수식은 컴파일된 트리를 직접 재사용하며, 의미가 대상 표 행에 따라 달라지는 A1 구조적 참조는 해당 대상 컨텍스트에 대해 해석되고 컴파일됩니다
템플릿은 쓰기 가능한 워크시트 상태를 유지하지 않고, 통합 문서가 삭제된 후에는 안전하게 xlfeWorksheetUnavailable 을 보고하며, 통합 문서 변경으로 원래 컴파일된 컨텍스트가 오래되면 컨텍스트 인식 재컴파일로 대체합니다

리소스, 외부 참조 및 콜백 옵션

AllowExternalReferences기본값은 true이지만 명시적으로 등록된 작업 영역 대상 또는 파일 로컬 캐시만 허용하고 암시적인 파일 또는 네트워크 접근은 수행하지 않습니다
AllowUnsafeFormulaCallbacks기본값은 false이며, 인수가 평가되기 전에 위험한 함수 이름이 사용자 함수 레지스트리나 콜백에 도달하는 것을 차단합니다. 거부되면 xlfeUnsafeFunctionDenied
CancelFlag평가 전후에 검사되는 선택적 부울 포인터입니다
MaxFormulaLength기본값은 8192 UTF-16 코드 단위입니다
MaxEvaluationSteps기본값은 1,000,000개 구문 항목 평가입니다
MaxRecursionDepth기본값은 256 단계의 중첩 수식 평가입니다
MaxArrayBytes생성되는 배열 페이로드의 기본값은 64 MiB입니다
0 또는 음수 최대값은 해당 호출별 한도를 비활성화합니다. 통합 문서 전체 배열 메모리 정책은 여전히 적용되며, 활성화된 한도에 도달하면 임시 평가 상태를 해제한 후 xlfeResourceLimit 를 반환합니다
명시적 옵션을 받는 오버로드는 해당 호출에 대해 AllowUnsafeFormulaCallbacks 를 최우선 설정으로 취급하며, 기본 1회성 평가와 템플릿 평가는 같은 이름의 통합 문서 속성을 상속합니다

Delphi 예제

Template := Sheet.CreateFormulaEvaluationTemplate(2, 2,
  '=R[-1]C[-1]+1', xlfrsR1C1);

Result := Template.EvaluateAt(2, 2);
if Result.Status = xlfeOk then
  UseValue(Result.Value);

Options := XLSDefaultFormulaEvaluationOptions;
Options.MaxEvaluationSteps := 10000;
Result := Template.EvaluateAtWithOptions(20, 4, Options);

C++Builder 예제

Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
  sheet->CreateFormulaEvaluationTemplate(1, 1,
    WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);

Lxcalc::TXLSFormulaEvaluationResult result =
  evalTemplate->EvaluateAt(7, 8);

직접 정규식 백엔드 API에는 인스턴스별 매칭, 치환, 상태 값과 호출자 예산이 정리되어 있습니다

REGEX 수식은 PCRE2 워크스페이스와 출력 할당을 포함해 현재 평가 컨텍스트의 작업량, 메모리, 취소 제어를 공유합니다. 취소나 리소스 한도 도달 시 부분 추출·치환 결과를 내놓지 않고 명시적인 상태를 반환합니다

GROUPBY와 PIVOTBY는 캡처된 Lambda 환경, 그룹핑 인덱스, 콜백 벡터, 출력 저장소를 포함해 현재 컨텍스트에서 분리된 배열이나 워크시트 범위 스냅샷을 요약합니다. 리소스 한도와 취소는 워크시트 데이터, 캐시, 레이아웃을 바꾸지 않고 명시적인 상태를 반환합니다

참고 항목

TXLSWorksheet.Calculate 메서드
IXLSWorkbook.Calculate 메서드
Excel 계산 엔진