Dokumentacija HotXLS Vsebina Domov Pregled IXLSWorkbook Domov Vsebina IXLSWorkbook TXLSXWorkbook

OnUserFunction / OnUserFunctionEx callback

The OnUserFunction callback lets application code evaluate custom or otherwise unsupported worksheet functions during Calculate. Assign it on TXLSWorkbook or TXLSXWorkbook before calling Calculate Use OnUserFunctionEx when the callback needs the current formula context. The context reports the 1-based sheet index plus the 1-based row and column of the formula cell; workbook-level Calculate calls that are not evaluating a cell report row and column as 0

Skladnja

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 The funkcija name from the formula text Args A zero-based Variant array containing evaluated argument values. For zero-argument functions this value is Null Context For OnUserFunctionEx, reports SheetIndex, Row, and Col. Sheet, row and column values are 1-based for cell formulas; row and column are 0 when no cell is being evaluated Value Set this to the funkcija result Handled Set to True when the callback supplies a result. Leave False to keep the normal unsupported funkcija behavior

Primer

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

Context-aware example

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

Glej tudi

IXLSWorkbook.Calculatemetoda
TXLSWorksheet.Calculatemetoda
razred TXLSXWorkbook
razred TXLSXWorksheet Copyright © 2010-2026 losLab Software