Callback OnUserFunction pozwala kodowi aplikacji ewaluować niestandardowe lub nieobsługiwane funkcje arkusza podczas Calculate. Przypisz go do TXLSWorkbook lub TXLSXWorkbook przed wywołaniem Calculate
Użyj OnUserFunctionEx gdy callback potrzebuje bieżącego kontekstu formuły. Kontekst raportuje 1-based indeks arkusza oraz 1-based wiersz i kolumnę komórki formuły; wywołania Calculate na poziomie skoroszytu, które nie ewaluują komórki, raportują wiersz i kolumnę jako 0
Składnia
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;
Argumenty
| FunctionName |
funkcja nazwa z formuła tekst |
| Args |
zero-oparty Variant array containing evaluated
argument wartości. dla zero-argument funkcje ten wartość jest
Null |
| Context |
dla OnUserFunctionEx, reports SheetIndex, Row, i Col. arkusz, wiersz i kolumna wartości są 1-oparty dla komórka formuły; wiersz i kolumna są 0 gdy no komórka jest being evaluated |
| Value |
ustawić ten do funkcja result |
| Handled |
ustawić do True gdy callback supplies
result. Leave False do keep normal unsupported
funkcja behavior |
Przykład
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)');
Przykład z kontekstem
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');
Zobacz też