REGISTER.ID

返回指定的 DLL 或 代码资源注册过的函数 ID。如果 DLL 或 代码资源没有注册,这个函数将会注册它们,并返回 注册ID。

REGISTER.ID 可以用于工作表(不同于 REGISTER函数),但你不能在 REGISTER.ID 中指定函数名称和参数名称。更多关于 DLL 和代码资源以及数据类型的介绍,请查看 “使用 CALL 和 REGISTER 函数”


注意 因为 Windows 上的 Excel 程序和 苹果机上的 Excel 程序使用了不同的代码资源类型,REGISTER.ID 在两种系统上使用的语法,有一点区别。


Windows 语法

REGISTER.ID ( module_text, procedure, type_text )

参数说明

module_text 指定包含了一个DLL名称,DLL中包含了 Windows Excel 要使用函数代码。

Procedure 指定DLL中的函数名称。你也可以使用在DLL导出文件 .del 中关联的序号。

type_text 指定返回值和参数值的数据类型。第一个字母表示返回值类型。如果函数或代码资源已经注册,你可以省略这个参数。

实例

REGISTER.ID("Kernel32", "GetTickCount", "J!")

使用 CALL 和 REGISTER 函数

接下来,我们将描述,使用 CALL、REGISTER、REGISTER.ID 这三个函数时的参数和返回值类型。参数和返回值类型,根据你的操作系统环境,会有一点不同,这些不同在后面的数据类型表中有描述。

Excel 开发具包,包含了 DLL 、代码资源、Excel API、文件格式以及

其它一些 Excel 开发技术的内容。它还包含了开发自定义应用的代码示例和程序设计工具。你可以通过你的软件供应商或微软公司获取它。在美国,可以联系 微软开发服务团队 (800)227-4679 获取更多信息。

数据类型

CALL、REGISTER、REGISTER.ID 函数,type_text 参数指定了 DLL函数或代码资源中的返回值和参数值数据类型。 type_text 参数的第一个字符指定了返回值的类型。其余的字符表明所有参数的数据类型。例如,一个DLL函数返回了一个浮点数,并带有一个整型和浮点型参数,那么 type_text 参数就要设置为 “BIB”。

下表包含了,Excel 可以识别的完整数据列表,表中对每种数据类型都进行了详细的描述,以及 C 语言中的类型声明。

代码 描述 传送 C 语言描述
A 逻辑值(FALSE = 0,TRUE = 1) Value short int
B IEEE 8字节浮点数字 Value double
C 以空字符结尾的字符串 (字符串最大长度是255) Reference char *
D 字节计数字符串(第一个字节包含最大数量为255) Reference  Unsigned char *
E IEEE 8字节浮点数字 Reference double *
F 以空字符结尾的字符串(字符串最大长度为255个字符) Reference(modify in place)  char *
G 字节计数字符串(第一个字节描述了字符串的长度,字符串最大长度为255个字符) Reference(modify in place)  Unsigned char *
H 无符号2字节整型 Value Unsigned short int
I 带符号2字节整型 Value short int
J 带符号4字节整型 Value short int
K 数组 Reference FP *
L 逻辑值(FALSE = 0),TRUE = 1  Reference short int *
M 带符号 2字节 整型 引用 short int *
N 带符号 4字节 整型 引用 long int *
O 数组 Reference  传递3个参数

unsigned short int *

unsigned short int *
P OPER 数据结构 Reference OPER *
R XLOPER 数据结构 Reference XLOPER *

备注

  • C 语言声明是基于你的编译默认 8-byte doubles, 2-byte short integers, and 4-byte long integers 类型
  • Windows 程序开发环境中,所有的指针都是远指针。例如,你可以使用 unsigned char far * 声明 D 数据类型。
  • 所有DLL或代码资源中的函数都使用 Pascal 调用惯例。很多 C 编译器,允许你使用 Pascal 调用惯例。例如:

    pascal void main(rows, columns, a)
  • 如果函数为它的返回值,使用传入引用数据类型,你可以传递 空返回指针。Excel 将会解释为 #NUM! 错误值。

更多数据类型信息

本节包含了 数据类型 F, G, K, O, P 和 R 数据类型的详细信息,以及 type_text 参数的其它信息。

F 和 G 数据类型

使用 F 和 G 数据类型,函数可以修改由 Microsft Excel 分配的字符串缓存。如果返回的数据类型为 F 或 G,Excel 将忽略函数返回值。然后 在函数的参数列表中从左到右依次查找到数据类型为 F 或 G 的参数,然后,将此参数的内容做为函数的返回值。Excel 为参数分配了 256 个字符,因此函数返回的字符串长度,会大于它接收到的字符串长度。

K 数据类型

K 数据类型指向一个可变长度的 FP 结构。结构原型如下:

typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;

double array[1] 声明只有一个元素的数组。实际上,数组中的元素数据等于 行的数量乘上列的数量。

O 数据类型

O 数据类型只能用于参数,不能用于返回值。它传送了3个内空:行数量的指针,列数量的指针,浮点类型二维数组指针。

代替返回值,函数可以编辑 O 数据类型传送的数组。为此,你可以使用 ">O" 作为 type_text 参数。

O 数据类型与 FORTRAN DLL 兼容,通过引用传递参数。

P 数据类型

P 数据类型指向 OPER 结构。 OPER 结构 包含8个字节的数据,随后的两个字节表示数据类型。通过 P 数据类型 DLL 函数或代码资源可以接收和返回任意一种 Excel 数据类型。

OPER 结构原型如下:


typedef struct _oper {
union
{
double num;
unsigned char *str;
unsigned short int bool;
unsigned short int err;
struct
{
struct _oper *lparray;
unsigned short int rows;
unsigned short int columns;
} array;
} val;
unsigned short int type;
} OPER;

类型字段包括了下表中的一个值。

类型 描述 使用
1 Numeric num
2 String(first byte contains length of string) str
4 Boolean(logical) bool
16 Error: the error values are:

0 #NULL!

7 #DIV/0!

15 #Value!

23 #REF!

29 #NAME?

36 #NUM!

42 #N/A
err
64 Array array
128 Missing argument
256 Empty cell

type
1 Numeric num
2 String (first byte contains length of string) str
4 Boolean (logical) bool
16 Error: the error values are: 0 #NULL! 7 #DIV/0! 15 #Value! 23 #REF! 29 #NAME? 36 #NUM! 42 #N/A err
64 Array array
128 Missing argument
256 Empty cell

最后二个值只能做为参数,不能用于返回值。当调用函数时缺少一个参数,就会使用 128 Missing argument 传送。当引用了一个空单元格时,就会传递 Empty cell(256) 。

R 数据类型

从 DLL 中调用 Excel 函数时使用,R 数据类型指向一个 XLOPER 结构,它是 OPER 的加强版本,在 Excel 4.0 和 后续版本中,当你在 DLL 中 调用 Excel 函数时可以使用 R 数据类型编写 。 通过 XLOPER 结构 DLL 函数可以传送 表引用 和实现 流程控制。更多关于 R 数据类型的内容,请查看 Microsoft Excel Developer's Kit

易失性函数和重计算

只有当一个函数输入到单元格后,Excel 就会对函数进行计算,当它的引用发生改变,可单元格在一个宏中进行了计算。在 工作表中,你可以让函数为 易失性 状态,易失性函数,无论何时在工作表的任意单元格中进行计算时,易失性函数都必须重新进行计算。非易失性函数只在输入变量改变时才重新计算,若不用于计算工作表单元格的用户自定义函数中,则此方法无效。要让函数为易失性的,要感叹号(!)做为参数的最生一个字符,例如:

CALL("Kernel32", "GetTickCount", "J!")

在适当的位置进行修改

您可以使用一个单一的数字n 作为 type_text 返回类型代码,其中n是一个数字从1到9。这告诉Microsoft Excel修改变量的位置指出type_text第n个参数,而不是返回一个值。这也被称为修改到位。第N个参数必须是一个引用传递数据类型(C,D,E,F,G,K,L,M,N,O,P,R). DLL函数或代码资源也必须宣布无效关键字的C语言的程序关键字(或Pascal语言)。  

RegisteredFunctions 属性

返回一个数组,包含了 DLL 或 代码资源中的函数列表,它们使用 REGISTER 或 REGISTER.ID 函数注册。只读取。数组中的每一行都包含了单个函数的3项信息,见下表:

  1. DLL或代码资源名称
  2. DLL或代码资源中的过程名
  3. 指定返回的数据类型和参数类型

备注

如果这里没有注册函数。此属性返回 Null。使用 IsNull 函数可以测试返回的值是否是 Null。

【Excel 4.0 函数】REGISTER的更多相关文章

  1. 【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句

    形式1 REGISTER("SAMPLE.DLL", "MyFunction", "AIC") 形式1等效 VBA语句 Declare Fu ...

  2. 浅谈Excel开发:六 Excel 异步自定义函数

    上文介绍了Excel中的自定义函数(UDF ),它极大地扩展了Excel插件的功能,使得我们可以将业务逻辑以Excel函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表. 普通的 ...

  3. [VBA]用一个简单例子说明如何在Excel中自定义函数

    Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...

  4. Excel公式与函数——每天学一个

    说明(2018-5-29 20:35:53): 1. 根据刘伟的视频讲解进行总结,网上讲Excel公式与函数的貌似就他讲的还不错.在他的微博里看到现在的照片胖了不少,不过还挺帅的,不再是以前那个小屌丝 ...

  5. Excel中Sumproduct函数的使用方法

    1.sumproduct函数的含义 1 1.Sumproduct函数的适用范围,在给定的几组数组中,然后把数组间对应的元素相乘,最后返回乘积之和. 从字面上可以看出,sumproduct有两个英文单词 ...

  6. Excel中MATCH函数的正确使用

    Excel中MATCH函数是一个很强大的辅助函数, MATCH函数语法为:MATCH(lookup_value,lookuparray,match-type) lookup_value:表示查询的指定 ...

  7. excel中if函数的用法

    IF函数有三个参数,语法如下: =IF(条件判断, 结果为真返回值, 结果为假返回值) 第一参数是条件判断,比如说"A1="百度""或"21>3 ...

  8. 思迈特软件Smartbi:Excel数据分析常用函数汇总!

    多传统行业的数据分析师只要求掌握Excel即可,会SPSS/SAS是加分项.即使在挖掘满街走,Python不如狗的互联网数据分析界,Excel也是不可替代的. Excel是我们工作中经常使用的一种工具 ...

  9. Excel中COUNTIFS函数统计词频个数出现次数

    Excel中COUNTIFS函数统计词频个数出现次数   在Excel中经常需要实现如下需求:在某一列单元格中有不同的词语,有些词语相同,有的不同(如图1所示).需要统计Excel表格中每个词语出现的 ...

随机推荐

  1. Python XML解析(转载)

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  2. ZOJ 3711 Give Me Your Hand

    Give Me Your Hand Time Limit: 2 Seconds      Memory Limit: 131072 KB      Special Judge BellyWhite a ...

  3. Markdown 學習

    Markdown 格式由John Gruber 創建,是一種便於閱讀,非常簡潔直觀的純文本文件格式,可以方便地轉為html等其他格式,很適合與寫作,不需要關注排版問題 常用學習資源有: ###標題用 ...

  4. 第一节 HTML网页和CSS样式

    1. 第一行 <!DOCTYPE html> 表明网页使用的是HTML5版本 2. 网页的head内容,包含了 title,meta. 3. 网页的标题 title,注意这个显示在浏览器的 ...

  5. C++实现对lua访问的封装

    这是一个几年前写的对lua的访问封装,当时的项目仅提供了最基本的lua访问接口:调用lua函数,向lua注册标准格式的C++函数. 本来我想引进luabind,但luabind相对又过于复杂,并不是所 ...

  6. Android文本读写

    //写文件操作   public void writeFileData(String fileName, String message){        try{            FileOut ...

  7. Redis学习笔记三:多机数据库的实现

    1.复制 执行slaveof命令或者设置slaveof选项,让一个服务器去复制另外一个服务器. 旧版复制功能的实现(Redis 2.8 之前的版本) 复制功能分为同步和命令传播两个操作. 同步(syn ...

  8. 【android-tips】如何在view中取得activity对象

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 今天想实现在view中返回上一个activity的功能,想了半天.因为在虽然view是包含于一个activity ...

  9. java中二进制和流的相互转换

    流转二进制 public static byte[] toByteArray(InputStream in) throws IOException { ByteArrayOutputStream ou ...

  10. [Asp.net MVC]Asp.net MVC5系列——第一个项目

    目录 概述 创建第一个项目 添加控制器 总结 概述 本教程是个人一步一步学习的总结,希望能帮到正在进入ASP.Net MVC5方向的朋友,个人也是准备进入ASP.NET MVC5领域,虽然艰辛,但是乐 ...