加载项可以通信吗?连接插件/插件依赖

Can add-ins Communicate? Connecting Add-ins / Add-in Dependency

加载项可以通信吗?

我有一个 Excel 插件与 API 通信。在该加载项中,它可以将 XML 打包数据作为字符串,并将 API 的路由作为 URL/I 作为字符串,然后将其发布数据:

Function PostApiXmlToXml(XML as String, URL as String) as String
   'Post to Url that XML data
   'PostApiXmlToXml = the XML response
End Function

问题是需要很多不同的路由和函数。并非所有用户 need/are 都有权使用所有路由。

我要么只是让每个人都能访问每个功能,但如果他们试图发送给一个他们无权访问的人,则会以未经授权的方式响应。

或者有一种方法可以让连接到主通信插件的每个功能都有一个插件?

例如这个单独的加载项有一个依赖于第一个的功能:

Function CalculateSomething(x as double, y as double, z as double) as double
    Xml = "<x>" + x + "</x>" &_
           "<y>" + y + "</y>" &_
           ""  ""       "" "" 
    route = "www.api.com/api/controller/func"
    CalculateSomething = PostApiXmlToXml(xml,route)
End Function

主要问题是用户可以随时选择使用新功能,因此我想让用户尽可能轻松地下载另一个加载项,让他们可以访问。将来还会添加更多功能。

有没有可能,或者我是不是用错了方法?

人们会推荐走 VSTO 路线吗?(没有任何经验)

is a way of having an add in for each function that Connects to the main communication add in?

假设 CalculateSomething 在一个加载项中,而您的另一个函数 PostApiXmlToXml 在一个单独的加载项的 Module1 中(我们只称它为 "MainAddIn.xlam" 已经安装在用户的机器上)

Function CalculateSomething(x as double, y as double, z as double) as double
    Xml = "<x>" + x + "</x>" &_
           "<y>" + y + "</y>" &_
           ""  ""       "" "" 
    route = "www.api.com/api/controller/func"
    CalculateSomething = _
        Application.Run("MainAddIn!Module1.PostApiXmlToXml", xml, route)
End Function

注意 您需要在 Run 语句中按名称指定 VBProject 和 Module。

要检查插件是否已安装,您可以使用如下函数:

Function IsAddInInstalled(name$) As boolean
Dim a
Dim ret as Boolean
For each a in Application.AddIns
    if (a.Name = name) then
        ret = True
        Exit For
    End If
Next

If not ret Then MsgBox "Please install " & name
IsAddInInstalled = ret
End Function

决定在哪里调用这个函数是另一回事。当然,您可以在 Dependent 加载项的每个过程中调用它,但最好将它放在 Workbook_Open 过程中,只调用一次:

Sub Workbook_Open()
    Call IsAddInInstalled("MainAddIn.xlam")
End Sub

这样,每次用户打开 Excel 时,它都会检查 "main" 加载项是否可用,如果不可用则弹出消息框。