HotXLS-Dokumentation

OnUserFunction / OnUserFunctionEx-Rückruf

Der OnUserFunction-Rückruf ermöglicht es Anwendungscode, benutzerdefinierte oder anderweitig nicht unterstützte Tabellenblattfunktionen während Calculate auszuwerten. Weisen Sie ihn TXLSWorkbook oder TXLSXWorkbook vor dem Aufrufen von Calculate zu
Verwenden Sie OnUserFunctionEx, wenn der Rückruf den aktuellen Formelkontext benötigt. Der Kontext meldet den 1-basierten Blattindex sowie die 1-basierte Zeile und Spalte der Formelzelle; Aufrufe von Calculate auf Arbeitsmappenebene, die keine Zelle auswerten, melden Zeile und Spalte als 0

Syntax

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;

Argumente

FunctionName Der Funktionsname aus dem Formelteext
Args zero-basiert Variant array containing evaluated argument Werte. für zero-argument Funktionen dieser Wert ist Null
Context für OnUserFunctionEx, reports SheetIndex, Row, und Col. Blatt, Zeile und Spalte Werte sind 1-basiert für Zelle Formeln; Zeile und Spalte sind 0 wenn no Zelle ist being evaluated
Value festlegen dieser zu Funktion result
Handled festlegen zu True wenn callback supplies result. Leave False zu keep normal unsupported Funktion behavior

Beispiel

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

Kontextbezogenes Beispiel

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

Siehe auch