Calcula el resultado de la expresión especificada
El evaluador integrado admite aritmética, referencias a celdas y rangos, rangos de nombres definidos y estos grupos de funciones:
funciones de texto (
TRIM,
PROPER,
CLEAN,
CHAR,
CODE,
T,
EXACT,
REPT,
FIND,
SEARCH,
SUBSTITUTE,
REPLACE);
funciones de fecha (
EDATE,
EOMONTH,
DATEDIF,
YEARFRAC,
DAYS,
WEEKNUM,
ISOWEEKNUM);
funciones de días laborables (
WORKDAY,
NETWORKDAYS);
funciones de ingeniería/conversión de base (
DEC2BIN,
DEC2HEX,
DEC2OCT,
BIN2DEC,
BIN2HEX,
BIN2OCT,
OCT2DEC,
OCT2BIN,
OCT2HEX,
HEX2DEC,
HEX2BIN,
HEX2OCT,
BASE,
DECIMAL,
ARABIC);
funciones bit a bit (
BITAND,
BITOR,
BITXOR,
BITLSHIFT,
BITRSHIFT);
funciones estadísticas (
VAR,
VARP,
STDEV,
STDEVP,
MODE,
VARA,
VARPA,
STDEVA,
STDEVPA);
funciones de agregado (
PRODUCT,
SUMSQ);
funciones matemáticas (
GCD,
LCM,
MROUND,
QUOTIENT,
MULTINOMIAL)
Las funciones de hoja de cálculo personalizadas o no admitidas aún pueden resolverse mediante
OnUserFunction / OnUserFunctionEx
Sintaxis
function Calculate(Expression: WideString):Variant;
| Expression |
WideString. Cadena que especifica la expresión que se debe calcular |
Ejemplo
Este ejemplo calcula la expresión simple
Val := Workbook.Calculate('100/2*3');
Este ejemplo calcula una expresión de texto
Val := Workbook.Calculate('SUBSTITUTE("a-b-c";"-";"+")');
Este ejemplo determina el valor más pequeño de un rango A1:F10 en la hoja de cálculo activa
TXLSWorkbook y TXLSXWorkbook pueden comparar los resultados de fórmula almacenados con resultados evaluados recientemente, sin reemplazar la caché almacenada
function CalculateAndVerify: Integer; overload;
function CalculateAndVerify(out Mismatches: TArray<TXLSVerifyMismatch>): Integer; overload;
El valor devuelto es el número de discrepancias. Cada registro contiene SheetIndex, SheetName, la Row y la Col de base 1, Expected, Actual y Formula. Se omiten las fórmulas volátiles, las celdas de tablas de datos, las fórmulas sin resultado almacenado y las fórmulas que no se pueden evaluar
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);