Delphi Excel UDF 变体 return 类型
Delphi Excel UDF with Variant return Type
我有一个使用 ExecuteExcel4Macro 注册 UDF 的加载项。这工作正常。只有在当前会话中检测到兼容的工作簿时,加载项才会注册。
问题是我想将当前 UDF 从 return 更改为一个字符,而是一个字符或 excel 错误。
我找到了一些关于使用类型库的文章,但我相信这意味着我的 UDF 将始终被注册,我想在注册它们时进行控制。
我目前注册
ExcelApp.ExecuteExcel4Macro('REGISTER("filepath","add-in-name","AccountDescription","CC","Account Id","My Addin group")');
function AccountDescription ( sAccountId: PChar ) : PChar ; stdcall ;
我正在使用 add-in-express 来帮助实现 excel 自动化。
CC 指示该函数接受以空字符结尾的字符串并期望以空字符结尾的字符串 returned。我不确定我是否可以指定一个变体,这样我就可以 return Excel2000.xlErrNa.
编辑:修复了上面的函数调用我忘记注册了。
编辑(2):
register 函数中的第 4 个参数包含 udf 参数和 return 值类型。我不确定如何指示变体。
编辑 (3):
dll/项目称为 DynacViews2,在 DynacViews2.dll 源文件中有:
exports AccountDescription;
抱歉,如果这有点零散。我想强调的是,这目前正在使用上面的代码。问题是试图将 AccountDescription 的签名更改为 return OleVariant 而不是 PChar。
更改的原因是我想 return 一个字符串或一个 Excel 错误。其他在线示例包括 add-in-express,显示使用 TypeLibrary 添加函数并将 return 类型指定为变体。这将使用 OleVariant 创建一个签名,并且可以 return 编辑字符串或 Excel Error(Excel2000.xlErrNa)。问题是我使用 VBA REGISTER 函数仅在工作簿兼容的情况下添加 UDF。
我可能没有正确处理这个问题。
编辑 4:
Example of Register usage - 此 link 显示了寄存器用法,但没有 link 到任何 Microsoft 站点,因此没有说明如何指定参数。
根据Using the CALL and Register Functions,Variant 不属于受支持的数据类型。
Code Description Pass by C Declaration
A Logical (FALSE = 0), TRUE = 1) Value short int
B IEEE 8-byte floating-point number Value (Windows) double (Windows)
Reference (Macintosh) double * (Macintosh)
C Null-terminated string Reference char *
(maximum length=255)
D Byte-counted string (first byte Reference Unsigned char *
contains length of string, maximum
string length = 255 characters)
E IEEE 8-byte floating-point number Reference double *
F Null-terminated string (maximum Reference (modify char *
string length = 255 characters) in place)
G Byte-counted string (first byte Reference (modify
contains length of string, maximum in place) unsigned char *
string length = 255 characters)
H Unsigned 2-byte integer Value unsigned short int
I Signed 2-byte integer Value short int
J Signed 4-byte integer Value long int
K Array Reference FP *
L Logical (FALSE = 0, TRUE = 1) Reference short int *
M Signed 2-byte integer Reference short int *
N Signed 4-byte integer Reference long int *
O Array Reference Three arguments are
passed:
unsigned short int *
unsigned short int *
double [ ]
P Microsoft Excel OPER data structure Reference OPER *
R Microsoft Excel XLOPER data structure Reference XLOPER *
我有一个使用 ExecuteExcel4Macro 注册 UDF 的加载项。这工作正常。只有在当前会话中检测到兼容的工作簿时,加载项才会注册。
问题是我想将当前 UDF 从 return 更改为一个字符,而是一个字符或 excel 错误。
我找到了一些关于使用类型库的文章,但我相信这意味着我的 UDF 将始终被注册,我想在注册它们时进行控制。
我目前注册
ExcelApp.ExecuteExcel4Macro('REGISTER("filepath","add-in-name","AccountDescription","CC","Account Id","My Addin group")');
function AccountDescription ( sAccountId: PChar ) : PChar ; stdcall ;
我正在使用 add-in-express 来帮助实现 excel 自动化。 CC 指示该函数接受以空字符结尾的字符串并期望以空字符结尾的字符串 returned。我不确定我是否可以指定一个变体,这样我就可以 return Excel2000.xlErrNa.
编辑:修复了上面的函数调用我忘记注册了。
编辑(2): register 函数中的第 4 个参数包含 udf 参数和 return 值类型。我不确定如何指示变体。
编辑 (3): dll/项目称为 DynacViews2,在 DynacViews2.dll 源文件中有:
exports AccountDescription;
抱歉,如果这有点零散。我想强调的是,这目前正在使用上面的代码。问题是试图将 AccountDescription 的签名更改为 return OleVariant 而不是 PChar。
更改的原因是我想 return 一个字符串或一个 Excel 错误。其他在线示例包括 add-in-express,显示使用 TypeLibrary 添加函数并将 return 类型指定为变体。这将使用 OleVariant 创建一个签名,并且可以 return 编辑字符串或 Excel Error(Excel2000.xlErrNa)。问题是我使用 VBA REGISTER 函数仅在工作簿兼容的情况下添加 UDF。
我可能没有正确处理这个问题。
编辑 4: Example of Register usage - 此 link 显示了寄存器用法,但没有 link 到任何 Microsoft 站点,因此没有说明如何指定参数。
根据Using the CALL and Register Functions,Variant 不属于受支持的数据类型。
Code Description Pass by C Declaration
A Logical (FALSE = 0), TRUE = 1) Value short int
B IEEE 8-byte floating-point number Value (Windows) double (Windows)
Reference (Macintosh) double * (Macintosh)
C Null-terminated string Reference char *
(maximum length=255)
D Byte-counted string (first byte Reference Unsigned char *
contains length of string, maximum
string length = 255 characters)
E IEEE 8-byte floating-point number Reference double *
F Null-terminated string (maximum Reference (modify char *
string length = 255 characters) in place)
G Byte-counted string (first byte Reference (modify
contains length of string, maximum in place) unsigned char *
string length = 255 characters)
H Unsigned 2-byte integer Value unsigned short int
I Signed 2-byte integer Value short int
J Signed 4-byte integer Value long int
K Array Reference FP *
L Logical (FALSE = 0, TRUE = 1) Reference short int *
M Signed 2-byte integer Reference short int *
N Signed 4-byte integer Reference long int *
O Array Reference Three arguments are
passed:
unsigned short int *
unsigned short int *
double [ ]
P Microsoft Excel OPER data structure Reference OPER *
R Microsoft Excel XLOPER data structure Reference XLOPER *