我正在使用Excel-DNA在Excel中开发一些UDF。从Excel传递到我的UDF的一个参数是一个范围。使用特定范围时,UDF可正常工作,如“A1:C50”。下面是我的函数定义的一个示例:如何针对UsedRange剪辑ExcelReference?
[ExcelCommand()]
public static object CalcSMA(object[,] range, int num_points) {
...
}
不过,我得到时整列范围传递,如“走出内存”错误“A:C”。我可以通过设置参数属性AllowReference = TRUE避免错误和更改参数类型为对象,如下面的例子:
[ExcelCommand()]
public static object CalcSMA([ExcelArgument("Range", AllowReference=true)]object range, int num_points) {
ExcelReference xref = (ExcelReference)range;
...
}
但现在我坚持想多行如何实际需要的UDF。我可以尝试迭代工作表中的所有行,但这非常低效。有没有办法将ExcelReference(xref)与使用的范围进行剪辑?我想避免使函数volatile(IsMacroType = true),但如果需要的话会这样做。
也看到https://groups.google.com/d/topic/exceldna/GXs6xbnSTKY/discussion - 使用UsedRange在Excel-DNA中更容易一些,因为您可以通过调用“ExcelDnaUtil.Application”来获得COM对象模型应用程序对象。 – Govert
感谢您的快速响应。如果您按照您的建议使用了缓存后的AfterCalculate事件,那么在打开工作簿之后,是否还需要在第一次计算期间迭代行? –
我陷阱工作簿打开事件最初填充缓存。 –