Documentazione HotXLS

Callback OnUserFunction / OnUserFunctionEx

Il callback OnUserFunction consente al codice dell'applicazione di valutare funzioni di foglio di lavoro personalizzate o altrimenti non supportate durante Calculate. Assegnarlo su TXLSWorkbook o TXLSXWorkbook prima di chiamare Calculate
Usare OnUserFunctionEx quando il callback ha bisogno del contesto della formula corrente. Il contesto riporta l'indice del foglio in base 1 più la riga e la colonna in base 1 della cella formula; le chiamate Calculate a livello workbook che non stanno valutando una cella riportano riga e colonna come 0

Sintassi

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;

Argomenti

FunctionName Nome dell'autore del commento. I nomi distinti sono scritti una sola volta nell'elenco a livello workbook e richiamati tramite authorId
Args zero-basato Variant array containing evaluated argument valori. per zero-argument funzioni questo valore è Null
Context Per OnUserFunctionEx, restituisce SheetIndex, Row e Col. I valori di Sheet, riga e colonna sono basati su 1 per le formule di cella; riga e colonna sono 0 quando non viene valutata alcuna cella
Value impostare questo funzione result
Handled impostare True quando callback supplies result. Leave False keep normal unsupported funzione behavior

Esempio

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

Esempio sensibile al contesto

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

Vedere anche