|
楼主 |
发表于 2016-6-11 09:48
|
显示全部楼层
====================
用于Excel的数据类型
====================
Excel 替换了几个 ANSI C/C++ 类型,以及一些特定的Excel数据结构。这儿提到这些是为了其它部分提供一个上下文,它们在 xlfRegister (Form 1) 主题中有详细的描述。
----------------------------
ANSI C/C++ 类型
----------------------------
== Numbers ==
所有版本的Excel:
* 8-byte double
* [signed] short [int] – used for Boolean values and also integers
* unsigned short [int]
* [signed long] int
== Strings ==
所有版本的Excel:
* [signed] char * – 由Null字节终止的255位的字符串。null-terminated byte strings of up to 255 characters
* unsigned char *
Excel 2007 版本特有:
* unsigned short * – Unicode 字符串支持 32,767 个字符,这些字符以 NULL或特定长度 结束
Excel工作表中的所有数字,都被包装为 doubles 类型,因此在外接程序 函数中声明为 integer 类型。
当你使用 integer 类型,Excel 会核实输入属于正确范围的类型,否则会返回 #NUM! 错误。但有一种例外情况,当你注册的函数接受 参数为 Boolean,就会应用 short int 类型。在这种情况下,任何 非零的输入都会被转换成 1,0 会直接采用。
----------------------------
Excel 特有的类型结构
----------------------------
所有版本的Excel:
* FP 二维浮点数组结构,在给的版本中支持 65,356 行 最大数量的列。
* XLOPER 多类型数据结构,它表示所有的工作表数据类型(包括错误类型),integers、范围引用,XLM 宏表带有控制类型,内部二进制存储类型。
注意 strings 被描绘成 拥有多达255个字符的字符串。
仅在 Excel 2007 支持:
* FP12 二维浮点数组结构支持Excel中的所有行和列
* XLOPER12 多类型数据结构,可以表示所有的工作表类型类型(包括错误类型),integers,范围引用,XLM 宏表带有控制类型内部二进制存储类型。
注意 strings 被描绘成 拥有多达 32,767 个字符的字符串。
----------------------------
注册类型类型代码
----------------------------
XLL 函数使用 C-API 函数 xlfRegister 注册。作它的第三个参数字符串会被编码为 返回 和 参数类型,这个 string 包含的信息会通知 Excel 函数是否是不稳定的,是否线程安全的,是否为 宏表等价内容,是否返回编辑了参数后的结果。
下表提供了一个大概的信息,更多详细的内容请查看 xlfRegister 主题。
Data type | Pass by value | Pass by ref (pointer) |
Comments
| Boolean | A | L | short (0=false or 1=true) | double | B | E | | char * | | C, F | Null-terminated ASCII byte string. | unsigned char *
|
| D, G | Length -counted ASCII byte string.
| unsigned short * (Excel 2007 only)
|
| C%, F%
| Null-terminated Unicode wide character string.
| unsigned short * (Excel 2007 only)
|
| D%, G%
| Length-counted Unicode wide character string.
| unsigned short [int]
| H
|
| WORD | [signed] short [int]
| I
| M
| 16-bit | [signed long] int
| J
| N
| 32-bit | Array
|
| O
| Passed as three arguments by reference:
[ol][li]
short int *rows
[/li][li]
short int *columns
[/li][li]
double *array
[/li][/ol]
| Array
(Excel 2007 only)
|
| O%
| Passed as three arguments by reference:
[ol][li]
int *rows
[/li][li]
int *columns
[/li][li]
double *array
[/li][/ol]
| FP
|
| K
| Floating-point array structure.
| FP12
(Excel 2007 only)
|
| K%
| Large grid floating-point array structure.
| XLOPER
|
| P
| Variable-type worksheet values and arrays.
|
|
| R
| Values, arrays, and range references.
| XLOPER12
(Excel 2007 only)
|
| Q
| Variable-type worksheet values and arrays.
|
|
| U
| Values, arrays, and range references.
|
C%, F%, D%, G%, K%, O%, Q, 和 U 都是 Excel 2007新增内容,它们不被Excel 早期版本支持。字符串类型 F, F%, G, 和 G% 用于编辑的参数。 当 XLOPER 或 XLOPER12 参数分别注册为 P 或 Q,Excel会 转换独立单元格引用为一个简单值,多单元格引用转换为数据。
类型 O,实际上这有3个参数在堆栈上,这个类型主要是为了兼容 Fortran语言编写的 DLL,参数以引用方式传递。它不能用于返回值,除了 声明参数为 modify-in-place 返回值,放置一个引用值结果。O% 类型扩展 0。它可以存取数组,它的覆盖的范围大于 Excel 2003 网格。 |
|