加载项可以通信吗?连接插件/插件依赖
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" 加载项是否可用,如果不可用则弹出消息框。
加载项可以通信吗?
我有一个 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" 加载项是否可用,如果不可用则弹出消息框。