O callback OnUserFunction permite que o código da aplicação avalie funções de planilha personalizadas ou não suportadas durante Calculate. Atribua-o em TXLSWorkbook ou TXLSXWorkbook antes de chamar Calculate
Use OnUserFunctionEx quando o callback precisar do contexto da fórmula atual. O contexto reporta o índice de planilha baseado em 1 mais a linha e coluna baseadas em 1 da célula de fórmula; chamadas de Calculate em nível de pasta de trabalho que não estão avaliando uma célula reportam linha e coluna como 0
Sintaxe
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;
Observações
| FunctionName |
função nome de fórmula texto |
| Args |
zero-baseado Variant array containing evaluated
argument valores. para zero-argument funções este valor é
Null |
| Context |
para OnUserFunctionEx, reports SheetIndex, Row, e Col. planilha, linha e coluna valores são 1-baseado para célula fórmulas; linha e coluna são 0 quando no célula é being evaluated |
| Value |
definir este para função result |
| Handled |
definir para True quando callback supplies
result. Leave False para keep normal unsupported
função behavior |
Exemplo
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)');
Veja também
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');
Veja também