Office-JS & VBA Addin 如何混搭

Evg*_*yuk 3 office-js

是否可以将 OfficeJS 命令按钮放置到像 .xlam 文件一样构建的自定义 VBA 插件面板?
* 我仍然希望混合使用 VBA 和 OfficeJS

San*_*arn 5

这是未经测试的,但我相信沿着这些路线的东西可以完成这项工作:

使用CustomXMLPart.dataNodeReplaced事件

function addNodeReplacedEvent() {
    Office.context.document.customXmlParts.getByIdAsync("vbaJSBridge", function (result) {
        var xmlPart = result.value;
        xmlPart.addHandlerAsync(Office.EventType.DataNodeReplaced, function (eventArgs) {
            // do stuff with xmlPart
            // here you should be able to receive information sent from VBA,
            // and return any data necessary.
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

在 VBA 中使用:

Dim part As CustomXMLPart 

' Returns a custom xml part by its ID:
Set part= ActiveDocument.CustomXMLParts.SelectByID("vbaJSBridge") 

part.LoadXML("<data id="vbaJSBridge">some data</data>")
Run Code Online (Sandbox Code Playgroud)

如前所述,我不确定这是否完全有效,但这是一种很好的(有点 hacky)完成这项工作的方法。或者,您可以使用 VBA 设置 HTTP 服务器,您可以将 HTTP 请求发送到 JavaScript。为此,您必须使用 Mswsock.dll 并调用accept方法,(我认为)。