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