Calcula o resultado de uma expressão especificada
O avaliador incorporado suporta operações aritméticas, referências a células e intervalos, intervalos com nomes definidos e estes grupos de funções: funções de texto (
TRIM,
PROPER,
CLEAN,
CHAR,
CODE,
T,
EXACT,
REPT,
FIND,
SEARCH,
SUBSTITUTE,
REPLACE); funções de data (
EDATE,
EOMONTH,
DATEDIF,
YEARFRAC,
DAYS,
WEEKNUM,
ISOWEEKNUM); funções de dia útil (
WORKDAY,
NETWORKDAYS); funções de engenharia/conversão de base (
DEC2BIN,
DEC2HEX,
DEC2OCT,
BIN2DEC,
BIN2HEX,
BIN2OCT,
OCT2DEC,
OCT2BIN,
OCT2HEX,
HEX2DEC,
HEX2BIN,
HEX2OCT,
BASE,
DECIMAL,
ARABIC); funções bit a bit (
BITAND,
BITOR,
BITXOR,
BITLSHIFT,
BITRSHIFT); funções estatísticas (
VAR,
VARP,
STDEV,
STDEVP,
MODE,
VARA,
VARPA,
STDEVA,
STDEVPA); funções de agregação (
PRODUCT,
SUMSQ); funções matemáticas (
GCD,
LCM,
MROUND,
QUOTIENT,
MULTINOMIAL). Funções de folha de cálculo personalizadas ou não suportadas ainda podem ser resolvidas através de
OnUserFunction / OnUserFunctionEx
Sintaxe
function Calculate(Expression: WideString):Variant;
| Expression |
WideString. Cadeia de caracteres que especifica uma expressão a calcular |
Exemplo
Este exemplo calcula a expressão simples
Val := Workbook.Calculate('100/2*3');
Este exemplo calcula uma expressão de texto
Val := Workbook.Calculate('SUBSTITUTE("a-b-c";"-";"+")');
Este exemplo determina o menor valor num intervalo A1:F10 na Folha de Cálculo activa
TXLSWorkbook e TXLSXWorkbook podem comparar os resultados armazenados das fórmulas com resultados obtidos numa avaliação recente, sem substituir a cache armazenada
function CalculateAndVerify: Integer; overload;
function CalculateAndVerify(out Mismatches: TArray<TXLSVerifyMismatch>): Integer; overload;
O valor de retorno é o número de discrepâncias. Cada registo contém SheetIndex, SheetName, Row e Col de base 1, Expected, Actual e Formula. As fórmulas voláteis, as células de tabelas de dados, as fórmulas sem resultado armazenado e as fórmulas que não podem ser avaliadas são ignoradas
MismatchCount := Workbook.CalculateAndVerify(Mismatches);
for I := 0 to MismatchCount - 1 do
Log(Mismatches[I].SheetName, Mismatches[I].Row,
Mismatches[I].Col, Mismatches[I].Expected, Mismatches[I].Actual);