我正在使用Excel Addin。我们在TaskPane和Dialog中提取了大量数据。因此,这使得Dialog开放速度变慢,因为它是一个单独的浏览器会话,无法利用已经在TaskPane中加载的数据。我想知道在TaskPane和Dialog之间共享会话数据的最佳方式是什么。我可以使用doc settings store。但那些是运行时数据,我真的不想将它们保留在文档中。我尝试使用LocalStorage。它适用于Excel Online和mac,但不适用于Windows。我认为他们在Windows Excel中打开对话框是一个全新的浏览器会话。所以我现在没有想法了。
此外,如果您已经提供了有关如何加快Dialog加载的建议,请告知我们。
答案 0 :(得分:0)
不确定这是否适合您的需要,但可能将其作为JSON数据传递:
从任务窗口调用对话框
var jsonData = encodeURIComponent(JSON.stringify(dataToPassToDialog));
Office.context.ui.displayDialogAsync('https://path/to/dialog.html?' + jsonData,
// change these to your preference
{ height: 70, width: 20, cache: false },
function (asyncResult) {
// note _dlg is globally defined
_dlg = asyncResult.value;
_dlg.addEventHandler(Office.EventType.DialogMessageReceived,
processDialogCallback);
}
);
然后在对话框表单上使用此函数从任务窗格中获取JSON数据
function getJSONFromUrl() {
var jsonGet = decodeURIComponent(window.location.search.substring(1));
var jsonGet = jsonGet.substring(0, jsonGet.lastIndexOf("]") + 1);
return JSON.parse(jsonGet);
}
最后将数据发送回任务窗口
Office.context.ui.messageParent(dataFromDialog);
答案 1 :(得分:0)
sessionStorage
对我来说是一个很好的解决方案。
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
这使我可以存储一个很大的字符串并从对话框窗口访问它。会话过期时(通常是在关闭浏览器/选项卡且不必处理本地存储时),会话存储数据将被清除。对话窗口似乎为我打开的非常快,因为仅根据需要获取数据,尽管我不确定速度是否仍然对您有问题(几年前有人问并回答了这个问题,从那时起,很多事情都可能发生了变化。
此外,我在Andre的回答上取得了一些成功。它工作得很好且可靠,但前提是我发送的字符串足够短。由于我试图将较大的字符串传递给对话框,因此如果字符串太大(不确定字符串的确切大小,以字节为单位),对话框就会出现问题,实际上该对话框在启动时会脱机而且不会渲染任何东西。
在我看来,在这种情况下依靠浏览器功能似乎很好。话虽如此,我不确定这是否一定是“最佳”方法,并且很想知道是否有更好的方法。