|
楼主 |
发表于 2022-8-23 21:05
|
显示全部楼层
是可以实现的不过有点麻烦,要调用C-API,因为ExcelDna的函数参数是不支持COM类型的参数传递的,通过一个ReferenceToRange进行转换,具体可以看下官方文档,就不多说了。
看你也是用的C#写的,附上C#版本供参考!不过单单这个还不行,还有一个小坑,看你自己能不能发现,哈哈。。。
- public class MyFunction: XlCall
- {
- private static object ReferenceToRange(ExcelReference xlRef)
- {
- int cntRef;
- string strText;
- string strAddress;
- Application App =ExcelDnaUtil.Application as Application;
- strAddress = (string)Excel(xlfReftext, xlRef.InnerReferences[0], true);
- for (cntRef = 1; cntRef <= xlRef.InnerReferences.Count - 1; cntRef++)
- {
- strText = (string)Excel(xlfReftext, xlRef.InnerReferences[cntRef], true);
- strAddress = strAddress + "," + strText.Substring(0,strText.LastIndexOf("!") + 2);
- }
- return App.Range[strAddress];
- }
- [ExcelFunction(IsMacroType = true)]
- public static string GetRangeComment([ExcelArgument(Description = "含有批注的单元格",AllowReference =true)] object Rng)
- {
- Range r = (Range)ReferenceToRange((ExcelReference)Rng);
- if (r!=null)
- {
- return r.Comment.Text();
- }
- else
- {
- return null;
- }
- }
- }
复制代码
|
-
|