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