这更像是一个 sveltekit 问题,然后是一个 Office-js 问题......
我在 sveltekit 中内置了一个 office.js 插件,可以对用户的域或 live.com 进行身份验证。除了一件事之外,这工作得很好。在manifest.xml中,我指定了2个按钮,一个用于打开任务窗格,一个用于从函数文件运行函数。第一个工作正常,但我似乎无法运行该函数。
这里有一些代码片段展示了我的尝试: 在清单中我有:
...
<FunctionFile resid="Commands.Url" />
...
<Control xsi:type="Button" id="TaskpaneButton2">
...
<Action xsi:type="ExecuteFunction">
<FunctionName>writeValue</FunctionName>
</Action>
...
<bt:Url id="Commands.Url" DefaultValue="https://localhost:5173/addin" />
...
在 sveltekit 路线 src/routes/addin/+page.svelte 我有这个:
<script lang="ts">
function writeValue(event:Office.AddinCommands.Event) {
Office.context.document.setSelectedDataAsync('ExecuteFunction works',
(asyncResult) => {
...
});
event.completed();
}
</script>
我看到该按钮出现在 Excel 菜单栏中,并且打开任务窗格按钮工作正常,但 writeValue 似乎不存在或运行。此外,使用 ExecuteFunction 查看任何 console.log 输出时没有调试窗口,因此我不知道错误消息是什么(如果有)。有没有办法将控制台窗口连接到它?
当我将该函数放入 /static/addin 中的 javascript 文件中并创建一个使用 Commands.Url 并将其指向该文件的 html 时,它运行良好,但这会将其与我不希望的应用程序完全分开出于明显的原因而这样做。
Microsoft 文档说操作可以运行的函数应该在 Commands.Url 指向的页面的头部定义。我期望 +page.svelte 中的功能可以像这样可用,但不知何故它找不到它或者它不会像那样运行。
那么问题是,+page.svelte 如何使该函数可供 office.js 脚本找到并运行它?任何有关如何设置的指示将不胜感激!
我相信为了完成这项工作,您必须更新清单以使用共享运行时,以便功能区和任务窗格中的命令都能够共享代码/上下文?
在清单中添加一个新的“要求”部分,位于主机之后,如下所示:
<Hosts>
...
</Hosts>
<Requirements>
<Sets DefaultMinVersion="1.1">
<Set Name="SharedRuntime" MinVersion="1.1"/>
</Sets>
</Requirements>