【发布时间】:2012-12-24 20:59:54
【问题描述】:
当尝试在 VBA 中调用以下 Excel-DNA-Method 时,我只得到一个大小为 1 的数组(在 65536 行之后,该数组似乎被调整为实际数组大小 - 65537)。当将工作表中的方法作为数组函数调用时,整个过程都有效。
[ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")]
public static object[] example() {
object[] ret = new object[65537];
return ret;
}
我正在使用 Excel 2007,工作表是 xlsm-Worksheet,当使用这样的二维数组时,一切正常。
[ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")]
public static object[,] example() {
object[,] ret = new object[65537,1];
return ret;
}
但使用二维数组的方式与其他情况相同
[ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")]
public static object[,] example() {
object[,] ret = new object[1,65537];
return ret;
}
有人知道如何解决这个问题吗?
在 VBA 中做同样的事情效果很好
Function test()
Dim ret As Variant
ReDim ret(65536)
test = ret
End Function
Sub testSub()
Dim output
output = Application.Run("test")
End Sub
输出的维度为 65537(索引从 0 开始),大于 65537 的数字也有效。
【问题讨论】:
-
在第一个例子中你想用
object[]代替object[,]吗? -
如果你做一个VBA函数返回这样一个一维数组,并通过Application.Run调用它,你有同样的问题吗?
-
是的,第一个例子是一个对象[]
-
您能将 object[65537,1] 的情况与 object[1, 65537] 进行比较吗?我认为后者应该和object[65537]一样。
-
Excel C API 没有一维数组。 Excel-DNA(使用 C API)将对象 [65537] 编组为对象 [1,65537]。剩下的就是通过制作一个返回具有正确内容的数组类型 XLOPER12 的小型 C 插件来确认这确实是 Excel C API 中的一个限制(错误?),并检查它是否存在相同的问题。至少,这将排除 Excel-DNA 的问题。
标签: c# excel vba user-defined-functions excel-dna