您可以使用xlcOnKey和ExcelDNA在另一个代码文件中指定方法吗?



我可以在同一代码文件/命名空间中成功地将方法注册到 excel 击键,如下所示:

XlCall.Excel(XlCall.xlcOnKey, "^t", "TESTMETHOD");

我可以以某种方式在另一个文件的不同静态类中指定方法吗?例如:

XlCall.Excel(XlCall.xlcOnKey, "c", "utilClass.TESTMETHOD");

当我尝试这个Excel时,告诉我"无法运行宏utilClass.TESTMETHOD。宏可能在此工作簿中不可用,或者可能禁用了所有宏。

是的,你可以。使用 Excel-DNA 的默认注册机制时,类的名称无关紧要(似乎是您的情况(。

默认情况下,Excel-DNA 会扫描外接程序程序集以查找公共类中的静态方法,并自动将它们注册为与方法名称同名的命令或函数,而不考虑该方法所属类的名称

这意味着当您TESTMETHOD移动到名为utilClass的类时,它仍将作为TESTMETHOD在 Excel 中注册,因此,即使该方法位于不同的类上,您的注册码也保持不变:

XlCall.Excel(XlCall.xlcOnKey, "^t", "TESTMETHOD");

如果要为命令定义自定义名称,可以使用 addExcelCommand属性并设置所需的名称(下面的示例(,或者,如果要对注册进行更多控制,也可以使用 Excel-DNA 自定义注册库。

public static class UtilClass
{
[ExcelCommand(Name = "UtilClass.TestMethod")]
public static void TestMethod()
{
// ...
}
}
public class MyAddIn : IExcelAddIn
{
public void AutoOpen()
{
XlCall.Excel(XlCall.xlcOnKey, "^t", "UtilClass.TestMethod");
}
// ...
}

值得一提的是,您可以直接在ExcelCommand属性中轻松定义快捷方式,而无需调用XlCall.Excel来注册快捷方式......例如

public static class UtilClass
{
[ExcelCommand(Name = "UtilClass.TestMethod", ShortCut = "^t")]
public static void TestMethod()
{
// ...
}
}

以上将自动注册一个名为UtilClass.TestMethod的命令,该命令可以通过CTRL+T触发。

最新更新