HotXLS 문서

OnUserFunction / OnUserFunctionEx 콜백

OnUserFunction 콜백을 사용하면 응용 프로그램 코드가 Calculate 중 사용자 지정 또는 지원되지 않는 워크시트 함수를 평가할 수 있습니다. Calculate를 호출하기 전에 TXLSWorkbook 또는 TXLSXWorkbook에 할당합니다
콜백이 현재 수식 컨텍스트를 필요로 할 때 OnUserFunctionEx를 사용합니다. 컨텍스트는 1 기반 시트 인덱스와 수식 셀의 1 기반 행 및 열을 보고합니다. 셀을 평가하지 않는 통합 문서 수준 Calculate 호출은 행과 열을 0으로 보고합니다

구문

type
  TXLSUserFunctionContext = record
    SheetIndex: Integer;
    Row: Integer;
    Col: Integer;
  end;

  TXLSUserFunctionEvent = procedure(
    Sender: TObject;
    const FunctionName: WideString;
    const Args: Variant;
    var Value: Variant;
    var Handled: Boolean) of object;

  TXLSUserFunctionExEvent = procedure(
    Sender: TObject;
    const FunctionName: WideString;
    const Args: Variant;
    const Context: TXLSUserFunctionContext;
    var Value: Variant;
    var Handled: Boolean) of object;

property OnUserFunction: TXLSUserFunctionEvent;
property OnUserFunctionEx: TXLSUserFunctionExEvent;

인수

FunctionName 함수 이름 에서 수식 텍스트
Args zero-기반 Variant array containing evaluated argument 값. 용 zero-argument 함수 이 값 입니다 Null
Context OnUserFunctionEx, reports SheetIndex, Row, 및 Col. 시트, 행 및 열 값 입니다 1-기반 용 셀 수식; 행 및 열 입니다 0 때 no 셀 입니다 being evaluated
Value 설정 이 로 함수 result
Handled 설정 로 True 때 callback supplies result. Leave False 로 keep normal unsupported 함수 behavior

예제

procedure TForm1.WorkbookUserFunction(Sender: TObject;
  const FunctionName: WideString; const Args: Variant;
  var Value: Variant; var Handled: Boolean);
begin
  if SameText(FunctionName, 'DOUBLEPLUS') then
  begin
    Value := Double(Args[0]) * 2 + Double(Args[1]);
    Handled := True;
  end;
end;

Workbook.OnUserFunction := WorkbookUserFunction;
Value := Workbook.Calculate('=DOUBLEPLUS(A1;5)');

컨텍스트 인식 예제

procedure TForm1.WorkbookUserFunctionEx(Sender: TObject;
  const FunctionName: WideString; const Args: Variant;
  const Context: TXLSUserFunctionContext;
  var Value: Variant; var Handled: Boolean);
begin
  if SameText(FunctionName, 'ROWBONUS') then
  begin
    Value := Double(Args[0]) + Context.Row + Context.Col;
    Handled := True;
  end;
end;

Workbook.OnUserFunctionEx := WorkbookUserFunctionEx;
Value := Worksheet.Calculate('=C2');

참조