El callback OnUserFunction permite al código de la aplicación evaluar funciones de hoja de cálculo personalizadas o no compatibles durante Calculate. Asígnelo en TXLSWorkbook o TXLSXWorkbook antes de llamar a Calculate
Use OnUserFunctionEx cuando el callback necesite el contexto de fórmula actual. El contexto informa el índice de hoja basado en 1 más la fila y columna basadas en 1 de la celda de fórmula; las llamadas a Calculate a nivel de libro de trabajo que no están evaluando una celda informan fila y columna como 0
Sintaxis
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;
Argumentos
| FunctionName |
función nombre desde fórmula texto |
| Args |
zero-basado Variant array containing evaluated
argument valores. para zero-argument funciones este valor es
Null |
| Context |
para OnUserFunctionEx, reports SheetIndex, Row, y Col. hoja, fila y columna valores son 1-basado para celda fórmulas; fila y columna son 0 cuando no celda es being evaluated |
| Value |
establecer este función result |
| Handled |
establecer True cuando callback supplies
result. Leave False keep normal unsupported
función behavior |
Ejemplo
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)');
Ejemplo con contexto
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');
Véase también