HotXLS 文件

OnUserFunction / OnUserFunctionEx 回呼

OnUserFunction 回呼允許應用程式程式碼在 Calculate 期間評估自訂或其他不受支援的工作表函數。在呼叫 Calculate 之前,將其指派給 TXLSWorkbookTXLSXWorkbook
當回呼需要目前的公式上下文時,使用 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');

另請參閱