加载项可以通信吗?
我有一个与API通信的Excel插件。在该加载项中,它可以将XML打包数据作为字符串接收,将API作为URL / I作为字符串路由,然后对其进行POST数据:
Function PostApiXmlToXml(XML as String, URL as String) as String
'Post to Url that XML data
'PostApiXmlToXml = the XML response
End Function
问题在于需要许多不同的路线和功能。并非所有用户都需要/有权使用所有路由。
我要么只是让每个人都能访问每个功能,但是如果他们试图发送给他们,他们就无法访问它,将会以未经授权的方式回复。
或者有一种方法可以为连接到主要通信的每个功能添加一个?
e.g。这个单独的加载项有一个依赖于第一个的函数:
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路线吗?(没有任何经验)
答案 0 :(得分:1)
是一种为每个连接到主要通信的功能添加的方式吗?
假设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和模块。
要检查是否安装了插件,您可以使用如下函数:
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时,都会检查“主”加载项的可用性,如果不可用则会出现一个消息框。