office.js 2mb 的要求是如何衡量的?

How does office.js 2mb requirement measured?

我想将不同大小的自定义设置数据保存到excel设置中。 但是当自定义设置太大时,saveAsync 不会保存,这是预期的 - 每个加载项有 2mb 的限制。

https://docs.microsoft.com/en-us/javascript/api/office/office.settings?view=word-js-preview

这是我当前的代码:

const bigJsonString = "Very big string";
const jsonObject = JSON.parse(stringValue);
Office.context.document.settings.set('mydata', jsonObject);
Office.context.document.settings.saveAsync((result)=>{
    ...
});

我知道 saveAsync 将使用结果调用回调方法。但不知何故它适用于 Office 365 但不适用于 Excel 桌面。

我想测量 jsonObjectbigJsonString 的大小,如果超过 2mb,则停止 setsaveAsync 调用

像这样:

const bigJsonString = "Very big string";
const jsonObject = JSON.parse(stringValue);
if(GetSize(jsonObject) > 2){
    // acknowledge user that add-in can't save customsetting.
} else {
    Office.context.document.settings.set('mydata', jsonObject);
    Office.context.document.settings.saveAsync((result)=>{
    ...
}
});

Office-JS如何测量设置对象的大小? (我要模仿)

更新(旁注):

根据以下 link,Microsoft 似乎取消了此 2mb 限制。

可以使用 JavaScript 测量设置的大小。

const isWritableSetting = (object) => {
   // .size will return your object size in bytes
   const blob = new Blob([JSON.stringify(object)], { type: 'application/json' })
   return blob.size < 2 /* Megabytes */ * 1000 /* Kilobytes */* 1000;
};

我已将 1024 调整为 1000 以更加安全;您可以验证它以查看它是否符合 1024 * 1024.

的条件

那么在您的代码中,您需要做的就是:

if (isWritableSetting(object)) ...

在 JS 中调整对象大小的一个很好的参考:String length in bytes in JavaScript