xlfEvaluate

Область применения: Excel 2013 | Office 2013 | Visual Studio

Использует средство синтаксического анализа и средство оценки функций Microsoft Excel для вычисления любого выражения, которое может быть введено в ячейку листа.

Excel12(xlfEvaluate, LPXLOPER12 pxRes, 1, LPXLOPER12 pxFormulaText);

Параметры

pxFormulaText (xltypeStr)

Вычисляемая строка. Ведущий знак равенства (=) является необязательным. Строка может быть любым текстом, который может быть введен в ячейку листа или листа макросов.

Значение свойства и возвращаемое значение

Возвращает результат вычисления строки, которая может быть любой из типов xltypeNum, xltypeStr, xltypeBool, xltypeErr, xltypeNil, xltypeMulti.

Замечания

Строка может содержать только функции, а не эквиваленты команд. Это эквивалентно нажатию клавиши F9 из строки формул. Если xlfEvaluate вызывается из функции листа XLL, зарегистрированной как потокобезопасная, выражение должно содержать только потокобезопасные функции.

Основная задача функции xlfEvaluate заключается в том, чтобы библиотеки DLL могли найти значение, присвоенное определенному имени, которое находится на листе или скрытом имени, определенному в библиотеке DLL. Обратите внимание, что в dll/XLL имя листа должно быть префиксом по крайней мере восклицательным знаком (!), чтобы убедиться, что оно интерпретируется как внешнее по сравнению с библиотекой DLL. Дополнительные сведения см. в разделе Вычисление имен и других выражений формул листа.

XlfEvaluate нельзя использовать для оценки ссылок на внешний лист, который не открыт.

Пример

В этом примере используется xlfEvaluate для принудительного ввода текста "! B38" к содержимому ячейки B38.

\SAMPLES\EXAMPLE\EXAMPLE.C. Эта функция вызывает макрос команды (xlcAlert) и будет правильно работать только при вызове из листа макросов или в качестве макрокоманды.

short WINAPI EvaluateExample(void)
{
    XLOPER12 xFormulaText, xRes, xRes2, xInt;
    xFormulaText.xltype = xltypeStr;
    xFormulaText.val.str = L"\004!B38";
    Excel12(xlfEvaluate, &xRes, 1, (LPXLOPER12)&xFormulaText);
    xInt.xltype = xltypeInt;
    xInt.val.w = 2;
    Excel12(xlcAlert, &xRes2, 2, (LPXLOPER12)&xRes, (LPXLOPER12)&xInt);
    Excel12(xlFree, 0, 1, (LPXLOPER12)&xRes);
    Excel12(xlFree, 0, 1, (LPXLOPER12)&xRes2);
    return 1;
}

См. также