C# 自动化外接程序与COM外接程序

C# 自动化外接程序与COM外接程序,c#,excel,events,automation,add-in,C#,Excel,Events,Automation,Add In,我是一名外接程序编程新手,需要以下场景的帮助: 我有一个C#Excel自动化插件,它调用了一些UDFs。我想在自动加载项加载期间进行用户名和密码检查,加载加载项时必须弹出一个屏幕,用户可以输入其详细信息。如何使用自动化加载项来完成 一般来说,如何使用自动化加载项进行事件处理?我希望在用户按F9计算某些单元格中的UDF公式时进行一些计算 是否有任何文章解释了自动化加载项中的事件处理?一般来说,自动化加载项不是为处理此类功能而设计的。您可以让外接程序实现IDTExtensibility2,以获取对运

我是一名外接程序编程新手,需要以下场景的帮助:

我有一个C#Excel自动化插件,它调用了一些
UDF
s。我想在自动加载项加载期间进行用户名和密码检查,加载加载项时必须弹出一个屏幕,用户可以输入其详细信息。如何使用自动化加载项来完成

一般来说,如何使用自动化加载项进行事件处理?我希望在用户按F9计算某些单元格中的UDF公式时进行一些计算


是否有任何文章解释了自动化加载项中的事件处理?

一般来说,自动化加载项不是为处理此类功能而设计的。您可以让外接程序实现IDTExtensibility2,以获取对运行外接程序的“Excel.Application”对象的引用。从那里,您可以访问“Excel.Application”类的所有事件。但是,自动化外接程序通常不是为处理Excel对象模型事件而设计的,它只是为支持用户定义函数(UDF)而设计的

我想做一个用户名和密码 在自动化过程中检查加载项 加载一个屏幕,其中 用户可以在弹出窗口中输入其详细信息 加载外接程序时。怎么可能呢 使用自动化插件完成了吗

当您的自动化外接程序首次加载时,请小心尝试采取操作。自动化外接程序是按需加载的,这意味着它只有在Excel需要时才会加载。当用户开始在单元格中输入自动化外接程序的第一个用户定义函数(UDF)时,通常会加载它。问题在于,当用户仍在编辑单元格时,大多数编程命令在尝试执行时都会失败。因此,如果您试图在外接程序首次加载时执行此类操作,则很有可能在Excel处于不允许代码安全执行的模式时加载外接程序。(有关详细信息,请参阅:)

要解决此问题,可以使用托管COM加载项,该加载项旨在处理Excel对象模型事件。如果需要,托管COM外接程序甚至可以加载自动化外接程序;或者托管COM外接程序类和自动化外接程序类都可以驻留在同一程序集中,在这种情况下,它们可以直接通信

如何在中完成事件处理 通用自动化插件?我 想在什么时候做一些计算吗 用户按F9来计算 一些细胞中的udf公式

可以通过订阅“Excel.Application.SheetCalculate”事件来检测何时按下F9键,该事件将在任何工作表完成计算时触发。在这种情况下,计算可能出于任何原因触发——而不仅仅是因为点击F9键。如果您希望专门捕获F9键,则需要使用“Application.OnKey”回调,该回调仅通过VBA可用。但是,您可以将项目中的类公开给COM,并从从“Application.OnKey”事件回调的VBA加载项调用它

有关自动化加载项的文章,请参阅:

有关托管COM加载项的文章,请参阅:

有关COM加载项和自动化加载项的文章,请参阅:

有关讨论使用VBA加载项调用托管应用程序的文章,请参阅:

我知道这需要消化很多东西,但希望这能让你继续前进。总的来说,我建议使用托管COM插件来处理用户界面功能。托管COM加载项保存的数据可以轻松地与自动化加载项共享,方法是让两个加载项都引用一个公共程序集,或者让托管COM加载项类和自动化加载项类都保存在同一程序集中

我希望这会有所帮助,请询问您是否希望我进一步澄清

--迈克

后续回复:

非常感谢您提供的链接和指针。我浏览了这些链接,对需要做什么有了一个合理的想法

很高兴这有帮助。:)这需要大量阅读,我建议你把它们打印出来,然后全部阅读。你希望做一些相当高级的事情,所以你对这个话题了解得越多,你的境况就会越好

如果我使用基于COM的加载项处理excel事件,如何合并UDF函数

托管COM加载项无法公开UDF函数。您仍然需要一个自动化加载项。但是,如果需要,托管COM外接程序类和自动化外接程序类都可以位于同一程序集中。因此,COM外接程序可以向用户询问您需要的信息,当自动化外接程序中的UDF运行时,这些值将可用于自动化外接程序

它们是否会在公式窗格中作为正常函数公开,类似于使用自动化加载项的情况

自动化外接程序公开的UDF将自动包含在“插入函数”向导中,并位于与自动化外接程序名称匹配的类别下。但是,描述不会自动包含Excel内置函数所提供的信息。默认功能通常很好,但如果您希望为“插入函数”向导提供更完整的信息,这本身就是一个复杂的主题。请参阅:

假设我需要调用一个公式getcube,它返回一个数字的立方体 公共双getcube(双a){返回a*a*a;}

当我的加载项同时使用定义我的UDF和IDTExtensibility2的自定义接口时,我如何处理这种情况?你能解释一下这个案子吗