IBM Lotus Symphony


Встраиваемый модуль для программирования в Lotus Symphony Spreadsheets

Значок Предупреждение Метод расширения Lotus® Symphony™ Spreadsheets с помощью встраиваемых модулей, который описан ниже, устарел. Интерфейсы по-прежнему допустимы и поддерживаются для совместимости с существующими встраиваемыми модулями, но для программирования новых встраиваемых модулей следует использовать новые Функции API.

Lotus Symphony Spreadsheets можно расширить с помощью встраиваемых модулей, которые являются внешними программными модулями, предоставляющими дополнительные функции для работы с электронными таблицами. Они перечислены в Мастере функций в категории Встраиваемый модуль. Если вы хотите самостоятельно создать встраиваемый модуль, то здесь можно узнать, какие функции должны быть экспортированы внешними DLL, чтобы встраиваемый модуль мог быть успешно прикреплен.

Lotus Symphony ищет папку встраиваемого модуля, определенную в конфигурации подходящей DLL. Для того чтобы Lotus Symphony распознала DLL, она должна иметь определенные свойства, описанные ниже. Эта информация позволяет программировать собственные встраиваемые модули для Мастера функций Lotus Symphony Spreadsheets.

Концепция встраиваемого модуля

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

Функции DLL встраиваемого модуля

Как минимум, должны существовать административные функции GetFunctionCount и GetFunctionData. С их помощью можно определить функции, а также типы параметров и возвращаемые значения. В качестве возвращаемых значений поддерживаются типы Double и String. Для параметров дополнительно поддерживаются области ячеек Double Array, String Array и Cell Array.

Параметры передаются с помощью ссылок. Поэтому, изменение этих значений в основном возможно. Однако, это не поддерживается в Lotus Symphony Spreadsheets, так как это не имеет смысла в электронных таблицах.

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

Функции вызываются синхронно и возвращают свои результаты немедленно. Функции реального времени (асинхронные функции) также возможны, однако, они не объяснены подробно из-за их сложности.

Общая информация об интерфейсе

Максимальным числом параметров функции встраиваемого модуля, подключенного к Lotus Symphony Spreadsheets, является 16: одно возвращаемое значение и максимум 15 входных параметров.

Типы данных определены следующим образом:

Таблица 1. Определения типов данных
Тип данных Описание
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.

Для всех функций DLL применяется следующее:

void CALLTYPE fn(out, in1, in2, ...)

Выход: Результирующее значение

Вход: Любое число типов (double&, char*, double*, char**, Cell area), где Cell area - это массив типа массива чисел двойной точности, массива строк или массива ячеек.

GetFunctionCount()

Возвращает количество функций без функций управления параметра ссылки. Каждая функция имеет уникальный номер от 0 до nCount-1. Этот номер будет необходим позже для функций GetFunctionData и GetParameterDescription.

Синтаксис

void CALLTYPE GetFunctionCount(USHORT& nCount)

Параметр

USHORT &nCount:

Выход: Ссылка на переменную, содержащую число функций встраиваемого модуля. Например: Если встраиваемый модуль предоставляет 5 функций для Lotus Symphony Spreadsheets, то nCount=5.

GetFunctionData()

Определяет всю важную информацию о функции встраиваемого модуля.

Синтаксис

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.

GetParameterDescription()

Предоставляет краткое описание функции встраиваемого модуля и ее параметров. Эта функция может быть использована для вывода описания функции и параметров в Мастере функций.

Синтаксис

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 различает между тремя различными матрицами, в зависимости от типа данных.

Матрица типа Double

В качестве параметра может быть передана область ячеек со значениями типа Number/Double. Матрица двойной точности в Lotus Symphony Spreadsheets определяется следующим образом:

Таблица 2. Определение матрицы чисел двойной точности
Смещение Название Описание
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 определяется следующим образом:

Таблица 3. Определение матрицы строк
Смещение Название Описание
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 определяется следующим образом:

Таблица 4. Определение матрицы ячеек
Смещение Название Описание
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 ... Следующий элемент

Комментарии по продукту | Дополнительная документация | Товарные знаки