IBM Lotus Symphony
|
![]() |
Метод расширения Lotus® Symphony™ Spreadsheets с помощью встраиваемых модулей, который описан ниже, устарел. Интерфейсы по-прежнему допустимы и поддерживаются для совместимости с существующими встраиваемыми модулями, но для программирования новых встраиваемых модулей следует использовать новые Функции API. |
Lotus Symphony Spreadsheets можно расширить с помощью встраиваемых модулей, которые являются внешними программными модулями, предоставляющими дополнительные функции для работы с электронными таблицами. Они перечислены в Мастере функций в категории Встраиваемый модуль. Если вы хотите самостоятельно создать встраиваемый модуль, то здесь можно узнать, какие функции должны быть экспортированы внешними DLL, чтобы встраиваемый модуль мог быть успешно прикреплен.
Lotus Symphony ищет папку встраиваемого модуля, определенную в конфигурации подходящей DLL. Для того чтобы Lotus Symphony распознала DLL, она должна иметь определенные свойства, описанные ниже. Эта информация позволяет программировать собственные встраиваемые модули для Мастера функций Lotus Symphony Spreadsheets.
Каждая библиотека встраиваемых модулей предоставляет несколько функций. Некоторые функции используются в административных целях. Для функций можно выбрать почти любое имя. Однако, они должны соответствовать определенным правилам, относящимся к передаче параметров. Точные соглашения об именовании и вызовах различаются в разных платформах.
Как минимум, должны существовать административные функции GetFunctionCount и GetFunctionData. С их помощью можно определить функции, а также типы параметров и возвращаемые значения. В качестве возвращаемых значений поддерживаются типы Double и String. Для параметров дополнительно поддерживаются области ячеек Double Array, String Array и Cell Array.
Параметры передаются с помощью ссылок. Поэтому, изменение этих значений в основном возможно. Однако, это не поддерживается в Lotus Symphony Spreadsheets, так как это не имеет смысла в электронных таблицах.
Библиотеки могут быть перегружены во время выполнения, и их содержимое можно проанализировать с помощью административных функций. Для каждой функции доступна информация о количестве и типе параметров, внутренних и внешних именах функций и административном номере.
Функции вызываются синхронно и возвращают свои результаты немедленно. Функции реального времени (асинхронные функции) также возможны, однако, они не объяснены подробно из-за их сложности.
Максимальным числом параметров функции встраиваемого модуля, подключенного к Lotus Symphony Spreadsheets, является 16: одно возвращаемое значение и максимум 15 входных параметров.
Типы данных определены следующим образом:
Тип данных | Описание |
---|---|
CALLTYPE | В Windows: FAR PASCAL (_far _pascal) В других системах: default (значение по умолчанию, специфичное для операционной системы) |
USHORT | 2-байтовое целое число без знака |
DOUBLE | 8-байтовый формат, зависящий от системы |
Paramtype | Платформо-зависимый, такой как int PTR_DOUBLE =0 указатель на число двойной точности PTR_STRING =1 указатель на строку с нулевым окончанием PTR_DOUBLE_ARR =2 указатель на массив чисел двойной точности PTR_STRING_ARR =3 указатель на массив строк PTR_CELL_ARR =4 указатель на массив ячеек NONE =5 |
Ниже приведено описание этих функций, которые называются вызываются во внешней DLL.
Для всех функций DLL применяется следующее:
void CALLTYPE fn(out, in1, in2, ...)
Выход: Результирующее значение
Вход: Любое число типов (double&, char*, double*, char**, Cell area), где Cell area - это массив типа массива чисел двойной точности, массива строк или массива ячеек.
Возвращает количество функций без функций управления параметра ссылки. Каждая функция имеет уникальный номер от 0 до nCount-1. Этот номер будет необходим позже для функций GetFunctionData и GetParameterDescription.
Синтаксис
void CALLTYPE GetFunctionCount(USHORT& nCount)
Параметр
USHORT &nCount:
Выход: Ссылка на переменную, содержащую число функций встраиваемого модуля. Например: Если встраиваемый модуль предоставляет 5 функций для Lotus Symphony Spreadsheets, то nCount=5.
Определяет всю важную информацию о функции встраиваемого модуля.
Синтаксис
void CALLTYPE GetFunctionData(USHORT& nNo, char* pFuncName, USHORT& nParamCount, Paramtype* peType, char* pInternalName)
Параметр
USHORT& nNo:
Вход: Номер функции от 0 до nCount-1 включительно.
char* pFuncName:
Выход: Имя функции, видимое для программиста, как она названа в DLL. Это имя не определяет имени, используемого в Мастере функций.
USHORT& nParamCount:
Выход: Число параметров функции встраиваемого модуля. Это число должно быть больше 0, потому что всегда существует значение результата. Максимальное число - 16.
Paramtype* peType:
Выход: Указатель на массив точно из 16 переменных типа Paramtype. Первые nParamCount входов заполняются параметрами подходящего типа.
char* pInternalName:
Выход: Имя функции, видимое для пользователя, как оно показано в the Мастере функций. Может содержать умляуты.
Параметры pFuncName и pInternalName являются символьными массивами, которые реализованы с размером 256 в Lotus Symphony Spreadsheets.
Предоставляет краткое описание функции встраиваемого модуля и ее параметров. Эта функция может быть использована для вывода описания функции и параметров в Мастере функций.
Синтаксис
void CALLTYPE GetParameterDescription(USHORT& nNo, USHORT& nParam, char* pName, char* pDesc)
Параметр
USHORT& nNo:
Входной: Количество функций в библиотеке; от 0 до nCount-1.
USHORT& nParam:
Входной: Указывает, для какого параметра предоставляется описание, параметры начинаются с 1. Если nParam = 0, то само описание предоставляется в pDesc. В этом случае, pName не имеет значения.
char* pName:
Выход: Принимает тип или имя параметра, например, слово "Number" или "String" или "Date", и тому подобное. Реализован в Lotus Symphony Spreadsheets как char[256].
char* pDesc:
Выход: Принимает описание параметра, например, "Значение, для которого должна быть вычислена область". Реализован в Lotus Symphony Spreadsheets как char[256].
pName и pDesc - это символьные массивы, реализованные в Lotus Symphony Spreadsheets с размером 256. Заметьте, что доступное пространство в Мастере функций ограничено, и что 256 символов не могут быть полностью использованы.
Следующие таблицы содержат информацию о том, какие структуры данных должны быть предоставлены внешним программным модулем для передачи в области ячеек. Lotus Symphony Spreadsheets различает между тремя различными матрицами, в зависимости от типа данных.
В качестве параметра может быть передана область ячеек со значениями типа Number/Double. Матрица двойной точности в Lotus Symphony Spreadsheets определяется следующим образом:
Смещение | Название | Описание |
---|---|---|
0 | Col1 | Номер столбца в верхнем левом углу области ячеек. Нумерация начинается с 0. |
2 | Row1 | Номер строки в верхнем левом углу области ячеек. Нумерация начинается с 0. |
4 | Tab1 | Номер таблицы в верхнем левом углу области ячеек. Нумерация начинается с 0. |
6 | Col2 | Номер столбца в нижнем правом углу области ячеек. Нумерация начинается с 0. |
8 | Row2 | Номер строки в нижнем правом углу области ячеек. Нумерация начинается с 0. |
10 | Tab2 | Номер таблицы в нижнем правом углу области ячеек. Нумерация начинается с 0. |
12 | Подсчет | Количество следующих элементов. Пустые ячейки не учитываются и не передаются. |
14 | Столбец | Номер столбца элемента. Нумерация начинается с 0. |
16 | Строка | Номер строки элемента. Нумерация начинается с 0. |
18 | Tab | Номер таблицы элемента. Нумерация начинается с 0. |
20 | Ошибка | Номер ошибки, где значение 0 определено как "нет ошибки". Если элемент взят из ячейки формулы, то номер ошибки определяется формулой. |
22 | Значение | 8-байтовая переменная IEEE типа double/floating |
30 | ... | Следующий элемент |
Область ячеек, которая содержит значения текстовых данных и передается как матрица строк. Матрица строк в Lotus Symphony Spreadsheets определяется следующим образом:
Смещение | Название | Описание |
---|---|---|
0 | Col1 | Номер столбца в верхнем левом углу области ячеек. Нумерация начинается с 0. |
2 | Row1 | Номер строки в верхнем левом углу области ячеек. Нумерация начинается с 0. |
4 | Tab1 | Номер таблицы в верхнем левом углу области ячеек. Нумерация начинается с 0. |
6 | Col2 | Номер столбца в нижнем правом углу области ячеек. Нумерация начинается с 0. |
8 | Row2 | Номер строки в нижнем правом углу области ячеек. Нумерация начинается с 0. |
10 | Tab2 | Номер таблицы в нижнем правом углу области ячеек. Нумерация начинается с 0. |
12 | Подсчет | Количество следующих элементов. Пустые ячейки не учитываются и не передаются. |
14 | Столбец | Номер столбца элемента. Нумерация начинается с 0. |
16 | Строка | Номер строки элемента. Нумерация начинается с 0. |
18 | Tab | Номер таблицы элемента. Нумерация начинается с 0. |
20 | Ошибка | Номер ошибки, где значение 0 определено как "нет ошибки". Если элемент взят из ячейки формулы, то номер ошибки определяется формулой. |
22 | Len | Длина следующей строки, включая замыкающий нулевой байт. Если длина, включая замыкающий нулевой байт, нечетна, то в строку добавляется второй нулевой, чтобы получилось четное значение. Поэтому, Len вычисляется как ((StrLen+2)&~1). |
24 | String | Строка с замыкающим нулевым байтом |
24+Len | ... | Следующий элемент |
Матрицы ячеек используются для вызова областей, содержащих как текст, так и числа. Матрица ячеек в Lotus Symphony Spreadsheets определяется следующим образом:
Смещение | Название | Описание |
---|---|---|
0 | Col1 | Номер столбца в верхнем левом углу области ячеек. Нумерация начинается с 0. |
2 | Row1 | Номер строки в верхнем левом углу области ячеек. Нумерация начинается с 0. |
4 | Tab1 | Номер таблицы в верхнем левом углу области ячеек. Нумерация начинается с 0. |
6 | Col2 | Номер столбца в нижнем правом углу области ячеек. Нумерация начинается с 0. |
8 | Row2 | Номер строки в нижнем правом углу области ячеек. Нумерация начинается с 0. |
10 | Tab2 | Номер таблицы в нижнем правом углу области ячеек. Нумерация начинается с 0. |
12 | Подсчет | Количество следующих элементов. Пустые ячейки не учитываются и не передаются. |
14 | Столбец | Номер столбца элемента. Нумерация начинается с 0. |
16 | Строка | Номер строки элемента. Нумерация начинается с 0. |
18 | Tab | Номер таблицы элемента. Нумерация начинается с 0. |
20 | Ошибка | Номер ошибки, где значение 0 определено как "нет ошибки". Если элемент взят из ячейки формулы, то номер ошибки определяется формулой. |
22 | Тип | Тип содержимого ячейки. 0 == Double, 1 == String |
24 | Value или Len | Если тип == 0: 8-байтовая переменная IEEE типа double/floating Если тип == 1: Длина следующей строки, включая замыкающий нулевой байт. Если длина, включая замыкающий нулевой байт, нечетна, то в строку добавляется второй нулевой, чтобы получилось четное значение. Поэтому, Len вычисляется как ((StrLen+2)&~1). |
26, если тип==1 | String | Если тип == 1: Строка с замыкающим нулевым байтом |
32 или 26+Len | ... | Следующий элемент |