繁体   English   中英

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 如何测量设置 object 的大小? (我想模仿)

更新(旁注):

根据下面的链接,微软似乎取消了这个 2mb 限制。

Excel 的办公设置限制是多少?

可以使用 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 中调整对象大小的一个很好的参考: JavaScript 中的 String length in bytes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM