Вычисляет результат указанного выражения
Встроенный вычислитель поддерживает арифметику, ссылки на ячейки и диапазоны, диапазоны определённых имён и следующие группы функций:
текстовые функции (
TRIM,
PROPER,
CLEAN,
CHAR,
CODE,
T,
EXACT,
REPT,
FIND,
SEARCH,
SUBSTITUTE,
REPLACE);
date functions (
EDATE,
EOMONTH,
DATEDIF,
YEARFRAC,
DAYS,
WEEKNUM,
ISOWEEKNUM);
workday functions (
WORKDAY,
NETWORKDAYS);
инженерные функции и функции преобразования систем счисления (
DEC2BIN,
DEC2HEX,
DEC2OCT,
BIN2DEC,
BIN2HEX,
BIN2OCT,
OCT2DEC,
OCT2BIN,
OCT2HEX,
HEX2DEC,
HEX2BIN,
HEX2OCT,
BASE,
DECIMAL,
ARABIC);
bitwise functions (
BITAND,
BITOR,
BITXOR,
BITLSHIFT,
BITRSHIFT);
statistical functions (
VAR,
VARP,
STDEV,
STDEVP,
MODE,
VARA,
VARPA,
STDEVA,
STDEVPA);
aggregate functions (
PRODUCT,
SUMSQ);
math functions (
GCD,
LCM,
MROUND,
QUOTIENT,
MULTINOMIALВстроенный вычислитель поддерживает арифметику, ссылки на ячейки и диапазоны, именованные диапазоны и группы функций: текстовые, даты, рабочих дней, преобразования систем счисления, побитовые, статистические, агрегирующие, математические. Пользовательские функции обрабатываются через
OnUserFunction / OnUserFunctionExСинтаксис
functionCalculate(Expression: WideString):Variant;
| Expression | WideString. Строка, задающая выражение для вычисления |
Пример
Вычисляет простое выражение
Val := Workbook.Calculate('100/2*3');
Вычисляет текстовое выражение
Val := Workbook.Calculate('SUBSTITUTE("a-b-c";"-";"+")');
Определяет наименьшее значение в диапазоне A1:F10 на активном листе
TXLSWorkbook and TXLSXWorkbook может сравнивать сохранённые результаты формул со свежевычисленными, не заменяя сохранённый кэш
function CalculateAndVerify: Integer; overload;
function CalculateAndVerify(out Mismatches: TArray<TXLSVerifyMismatch>): Integer; overload;
Возвращаемое значение — количество несовпадений. Каждая запись содержит SheetIndex, SheetName, one-based Row and Col, Expected, Actual, and Formula. Волатильные формулы, ячейки таблиц данных, формулы без сохранённого результата и формулы, которые невозможно вычислить, пропускаются
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);