IBM Lotus Symphony
|
![]() |
以下描述的通过附加项扩展 Lotus® Symphony™ Spreadsheets 的方法已经过时。为确保与现有附加项兼容,这些接口仍然有效并受支持,但在对新的附加项编程时,您应该使用新的 API 函数。 |
您可以使用附加项来扩展 Lotus Symphony Spreadsheets,这些附加项是外部编程模块,用于提供更多函数来处理电子表格。这些函数在函数向导的附加项类别中列出。如果您希望自己编写附加项程序,那么您可以在此了解要成功添加附加项,必须通过外部 DLL 导出哪些函数。
Lotus Symphony 会搜索配置中定义的附加项文件夹以获取适当的 DLL。要使 DLL 能由 Lotus Symphony 识别,该 DLL 必须包含特定属性,如下所述。这些信息帮助您针对 Lotus Symphony Spreadsheets 的函数向导编写自己的附加项程序。
每个附加项库都提供多个函数。有些函数用于管理目的。您可以为自己的函数选择几乎任何名称。但是,它们也要遵循有关参数传递的特定规则。具体的命名与调用约定因平台而异。
必须至少存在管理函数 GetFunctionCount 和 GetFunctionData。使用这两个函数可以确定函数、参数类型以及返回值。对于返回值,支持双精度和字符串类型。对于参数,还支持单元格区域双精度数组、字符串数组和单元格数组类型。
参数通过引用传递。因此,这些值基本上是可以更改的。但是,这在 Lotus Symphony Spreadsheets 中不受支持,因为这种更改在电子表格中没有任何意义。
在运行时会重新加载库,管理函数会对其内容进行分析。对于每个函数都提供了有关参数的数目和类型、内部和外部函数名称以及管理编号的信息。
函数以同步方式调用并立即返回结果。实时函数(异步函数)也可以使用;但是由于其复杂性,在此不作详细说明。
添加到 Lotus Symphony Spreadsheets 的附加项函数中,参数的数目最多为 16 个:包括一个返回值和最多 15 个函数输入参数。
数据类型定义如下:
数据类型 | 定义 |
---|---|
CALLTYPE | 在 Windows 中:FAR PASCAL(_far _pascal) 在其他操作系统中:缺省值(特定于操作系统的缺省值) |
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*、单元格区域),其中“单元格区域”是双精度数组、字符串数组或单元格数组类型的数组。
返回函数数目,不包含引用参数的管理函数。每个函数都有一个 0 到 nCount-1 之间的唯一编号。GetFunctionData 和 GetParameterDescription 函数稍后需要该编号。
语法
void CALLTYPE GetFunctionCount(USHORT& nCount)
参数
USHORT &nCount:
输出:针对一个变量的引用,该变量应包含附加项函数的数目。例如,如果附加项为 Lotus Symphony Spreadsheets 提供 5 个函数,那么 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:
输出:附加项函数中的参数数目。该数目必须大于零,因为始终存在结果值;最大值为 16。
Paramtype* peType:
输出:指向包含正好 16 个 Paramtype 类型的数组的指针。第一批 nParamCount 项用适合类型的参数填充。
char* pInternalName:
输出:用户看到的函数名称,该名称与函数向导中显示的名称相同。名称可以包含元音变音字符。
pFuncName 和 pInternalName 参数是字符数组,在 Lotus Symphony Spreadsheets 中以大小 256 来实现。
对附加项函数及其参数提供简要描述。作为一个选项,该函数可用于显示函数向导中的函数和参数描述。
语法
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:
输出:采用参数名称或类型,例如,字“数字”或“字符串”或“日期”等等。在 Lotus Symphony Spreadsheets 中以 char[256] 实现。
char* pDesc:
输出:采用参数的描述,例如,“Value,在该参数中将计算宇宙的大小”。在 Lotus Symphony Spreadsheets 中以 char[256] 实现。
pName 和 pDesc 是字符数组;在 Lotus Symphony Spreadsheets 以大小 256 实现。请注意,函数向导中的可用空间受限,无法完全使用 256 个字符。
下表包含有关为传递单元格区域,外部程序必须提供的数据结构的信息。Lotus Symphony Spreadsheets 可根据数据类型识别三种不同的数组。
作为参数,可以传递具有数字/双精度类型的值的单元格区域。在 Lotus Symphony Spreadsheets 中双精度数组定义如下:
偏移 | 名称 | 描述 |
---|---|---|
0 | Col1 | 单元格区域左上角的列号;编号从 0 开始。 |
2 | Row1 | 单元格左上角的行号;编号从 0 开始。 |
4 | Tab1 | 单元格区域左上角的表号;编号从 0 开始。 |
6 | Col2 | 单元格区域右下角的列号;编号从 0 开始。 |
8 | Row2 | 单元格区域右下角的行号;编号从 0 开始。 |
10 | Tab2 | 单元格区域右下角的表号;编号从 0 开始。 |
12 | Count | 后续元素的数目。对空单元格将不进行计数或传递。 |
14 | Col | 元素的列号;编号从 0 开始。 |
16 | Row | 元素的行号;编号从 0 开始。 |
18 | Tab | 元素的表号;编号从 0 开始。 |
20 | Error | 错误号,值 0 定义为“无错误”。如果元素来自公式单元格,那么错误值将由该公式确定。 |
22 | Value | 8 字节的双精度/浮点类型的 IEEE 变量 |
30 | ... | 下一个元素 |
一个单元格区域,包含“文本”数据类型的值,并且作为字符串数组传递。Lotus Symphony Lotus Symphony Spreadsheets 中的字符串数组定义如下:
偏移 | 名称 | 描述 |
---|---|---|
0 | Col1 | 单元格区域左上角的列号;编号从 0 开始。 |
2 | Row1 | 单元格左上角的行号;编号从 0 开始。 |
4 | Tab1 | 单元格区域左上角的表号;编号从 0 开始。 |
6 | Col2 | 单元格区域右下角的列号;编号从 0 开始。 |
8 | Row2 | 单元格区域右下角的行号;编号从 0 开始。 |
10 | Tab2 | 单元格区域右下角的表号;编号从 0 开始。 |
12 | Count | 后续元素的数目。对空单元格将不进行计数或传递。 |
14 | Col | 元素的列号;编号从 0 开始。 |
16 | Row | 元素的行号;编号从 0 开始。 |
18 | Tab | 元素的表号;编号从 0 开始。 |
20 | Error | 错误号,值 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 | Count | 后续元素的数目。对空单元格将不进行计数或传递。 |
14 | Col | 元素的列号; 编号从 0 开始。 |
16 | Row | 元素的行号;编号从 0 开始。 |
18 | Tab | 元素的表号;编号从 0 开始。 |
20 | Error | 错误号,值 0 定义为“无错误”。如果元素来自公式单元格,那么错误值将由该公式确定。 |
22 | Type | 单元格内容的类型,0 == 双精度,1 == 字符串 |
24 | Value 或 Len | 如果类型 == 0,那么为 8 字节的双精度/浮点类型的 IEEE 变量 如果类型 == 1,那么为后续字符串的长度(包含结束零字节)。如果包含结束零字节的长度等于奇数值,那么会对该字符串添加第二个零字节,以使长度成为偶数值。因此,Len 是通过 ((StrLen+2)&~1) 计算得到的。 |
26,如果类型 == 1 | String | 如果类型 == 1,那么为包含结束零字节的字符串 |
32 或 26+Len | ... | 下一个元素 |