Известные проблемы при разработке XLL для Excel

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

В этом разделе описываются известные проблемы в Microsoft Excel, которые могут возникнуть при разработке XLL.

Отмена регистрации команд и функций XLL

Когда XLL регистрирует функцию или команду, Excel создает новое имя ресурса и связывает ссылку на функцию DLL с этим именем. Имя берется из четвертого аргумента , pxFunctionText, функции xlfRegister . Это имя скрыто в обычных диалоговых окнах для управления именами листов. Чтобы отменить регистрацию функции или команды, необходимо удалить имя с помощью функции xlfSetName , передав имя, но не передав определение. Однако ошибка не позволяет удалить имя из списков мастера функций.

Усечение строки описания аргумента в мастере функций

Параметр pxArgumentHelp1 и все последующие параметры функции xlfRegister являются необязательными строками, которые соответствуют аргументам функции XLL. Мастер функций отображает их для предоставления помощи в диалоговом окне конструирования аргументов. Иногда excel усекает строку, соответствующую последнему аргументу, на один или два символа при ее отображении в диалоговом окне. Этого можно избежать, добавив дополнительную "пустую строку" в качестве последнего параметра argument help для регистрации функции.

Ограничение области двоичных имен

Двоичные имена и их данные можно получить только в том случае, если лист, который был активен на момент их создания, снова активен. Так как функции листов не могут активировать листы в книге (это могут делать только команды), приложения с двоичными именами очень ограничены. Например, если у вас есть команда, которая вызывается только с определенного листа, можно использовать двоичное имя для хранения данных, связанных с командами.

XlSet и книги с формулами массива

В Excel 2003 и более ранних версиях функция xlSet завершается ошибкой, если вы пытаетесь назначить значения диапазону на листе, который не является активным, где эквивалентный диапазон на активном листе содержит формулу массива. В этом случае Excel отображает сообщение "Невозможно изменить часть массива". Это исправлено в Excel 2007.

Циклические ссылки допустимы в таблицах данных

В настоящее время Excel не выдает ошибку, если вычисление, на основе чего основана таблица данных, ссылается на что-то в самой таблице. Несмотря на то, что этот сценарий маловероятен, следует быть осторожным при создании или изменении формул, которые используются для вычисления значений таблицы данных.

Преобразование целочисленного XLOPER12 в XLOPER

Так как целочисленный тип xltypeInt представляет собой 32-разрядное целое число со знаком в типе данных XLOPER12 , но это только 16-разрядное целое число со знаком в типе данных XLOPER , возможно, что некоторые целочисленные XLOPER12 значения не могут содержаться в целых числах XLOPER. Если Excel преобразует этот тип внутренне, он решает эту проблему путем преобразования типа в xltypeNumXLOPER с плавающей запятой.

Функция Framework XLOper12ToXLOper отражает это поведение для внутренней согласованности с Excel. При вызове этой функции не следует предполагать, что возвращаемый элемент XLOPER всегда будет иметь значение xltypeInt; при чтении my_xloper.val.w возвращается значение false, если тип my_xloperxltypeNum.

Возврат XLOPER или XLOPER12 путем изменения аргументов на месте

Excel разрешает регистрацию функций, возвращающих XLOPER или XLOPER12 путем изменения аргумента на месте. Однако если аргумент XLOPER/ XLOPER12 указывает на память, а затем указатель перезаписывается возвращаемым значением функции DLL, Excel может утечь память. Excel не отображает ошибку, но в конечном итоге может завершиться сбоем. Кроме того, если библиотека DLL выделяет память для возвращаемого значения, Excel может попытаться освободить ее, что может привести к немедленному сбою приложения. Поэтому не следует изменять аргументы XLOPER/ XLOPER12 на месте. Все аргументы XLOPER или XLOPER12 должны рассматриваться как строго доступные только для чтения.

Дополнительные сведения см. в статье Управление памятью в Excel.

См. также

XLOper12ToXLOperРазработка excel XLLs
Справочник по функциям API SDK XLL для Excel
Управление памятью в Excel