Documentation HotXLS

Rappel OnUserFunction / OnUserFunctionEx

Le rappel OnUserFunction permet au code applicatif d'évaluer des fonctions de feuille de calcul personnalisées ou non prises en charge lors de l'appel de Calculate. Assignez-le sur TXLSWorkbook ou TXLSXWorkbook avant d'appeler Calculate
Utilisez OnUserFunctionEx lorsque le rappel a besoin du contexte de formule courant. Le contexte rapporte l'index de feuille à base 1 ainsi que la ligne et la colonne à base 1 de la cellule de formule ; les appels Calculate au niveau du classeur qui n'évaluent pas une cellule rapportent ligne et colonne à 0

Syntaxe

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;

Arguments

FunctionName fonction nom depuis formule texte
Args zero-basé Variant array containing evaluated argument valeurs. pour zero-argument fonctions ce valeur est Null
Context pour OnUserFunctionEx, reports SheetIndex, Row, et Col. feuille, ligne et colonne valeurs sont 1-basé pour cellule formules; ligne et colonne sont 0 lorsque no cellule est being evaluated
Value définir ce à fonction result
Handled définir à True lorsque callback supplies result. Leave False à keep normal unsupported fonction behavior

Exemple

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

Exemple avec contexte

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

Voir aussi