什么是最好的方式来获得某些功能Dotnet应用程序级的Excel加擎,而不需要用户是本地管理员(即没有COM登记, 没有HttpListener)?是否有可能使用微软的消息队从VBA?

有帮助吗?

解决方案

如果我可以广泛地解释您的问题“如何在没有COM注册的情况下将.Net程序集中的功能暴露给Excel”那么一个出色的解决方案是使用Excel的XLL接口。 基本上一个部署了一个xll垫片和一个相关的.Net dll。当加载xll时,它会反映在dll上并将其中的函数公开给Excel。

这里可以找到一个开源实现 http://exceldna.typepad的.com /博客/ 2006/01 / introducing_exc.html

商业,封闭的来源,但在这里功能更丰富 http://www.managedxll.com/

其他提示

你不能简化它们作为COM对象,如外接程序不会运行中的默认应用领域。

这里是我已经做到了,这是无可否认的一点令人费解的。这是与一个应用程序级工作簿保存作为一个XLA文件,该文件在某些方面更加灵活,比纯粹的接程序。

  • 你需要产生一种类型的图书馆使用regasm.exe 将所引用的载>>>情绪.

  • 创建一个根厂类在你的.净的对象模型,该模型能够实例,任何这类要消耗在VBA(类似于"程序"类办公室目的型号)。

  • 然后你需要找到一种方法来传递一个参考的一个实例,这类工厂擎.一旦VBA有一个参考的一个实例,这类工厂,这可以叫它的方法实例的任何其他目的在你的.净的对象模型。

  • 通过一个实例擎,定义的宏在你载>>>情绪如下

例编码:

Private m_objMyFactory As Object

Public Sub RegisterFactory(MyFactory As Object)

    On Error GoTo ErrHandler
    Set m_objMyFactory = MyFactory
    Exit Sub
ErrHandler:
    MsgBox "An unexpected error occurred when registering the Factory component: " & Err.Description
    Exit Sub
End Sub
  • 现在请加代码的应用程序级ThisWorkbook_Open事件处理程序,其实例化工厂对象,并呼吁上述宏通过一个参考工厂的对象。

例编码:

void ThisWorkbook_Open()
{
     try
     {
         ThisApplication.Run("RegisterFactory",
             new MyNamespace.MyFactory(),
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     }
     catch (Exception ex)
     {
         MessageBox.Show("Load error: " + ex.ToString());
     }
}

还有一些要考虑的问题得到这个工作强有力的-如果你有兴趣在下这个让我知道,我会发布更详细的信息。

您可能对Excel4Net感兴趣(它类似于ExcelDNA和ManagedXll,但更易于使用):

网站: http://www.excel4net.com

博客: http://excel4net.blogspot.com

仅供未来读者参考:您可能还想看看这个问题:

从VBA访问VSTO应用程序 - 插件类型(Excel )

,尤其是那里引用的博客:

VSTO加载项,COMAddIns和RequestComAddInAutomationService

通过覆盖 RequestComAddInAutomationService(),您可以通过定义为所有这些功能提供入口点的Facade类,并将该类暴露给VBA来公开您想要的任何功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top