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');

関連項目