HotXLS-documentatie

OnUserFunction / OnUserFunctionEx callback

De OnUserFunction-callback laat applicatiecode aangepaste of anderszins niet-ondersteunde werkbladfuncties evalueren tijdens Calculate. Wijs het toe op TXLSWorkbook of TXLSXWorkbook vóór het aanroepen van Calculate
Gebruik OnUserFunctionEx wanneer de callback de huidige formulecontext nodig heeft. De context rapporteert de op 1 gebaseerde bladindex plus de op 1 gebaseerde rij en kolom van de forumuleercel; Calculate-aanroepen op werkmapniveau die geen cel evalueren, rapporteren rij en kolom als 0

Beschrijving

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;

Zie ook

FunctionName functie naam van formule tekst
Args zero-gebaseerd Variant array containing evaluated argument waarden. voor zero-argument functies deze waarde is Null
Context voor OnUserFunctionEx, reports SheetIndex, Row, en Col. blad, rij en kolom waarden zijn 1-gebaseerd voor cel formules; rij en kolom zijn 0 wanneer no cel is being evaluated
Value instellen deze naar functie result
Handled instellen naar True wanneer callback supplies result. Leave False naar keep normal unsupported functie behavior

Voorbeeld

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

Contextafhankelijk voorbeeld

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

Zie ook