【问题标题】:How does office.js 2mb requirement measured?office.js 2mb 需求如何衡量?
【发布时间】:2020-06-19 20:34:06
【问题描述】:

我想将不同大小的自定义设置数据保存到 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 em> 调用

类似这样的:

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

更新(旁注):

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

What is the office setting limitation for Excel Add in

【问题讨论】:

    标签: excel office-js office-addins


    【解决方案1】:

    可以使用 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

    【讨论】:

    • 感谢您的回答。我会对此进行测试并告诉你结果。
    • 它几乎成功了,但我们需要像这样转换对象: const blob = new Blob([JSON.stringify(object)], { type: 'application/json' })。你能更新答案吗? developer.mozilla.org/en-US/docs/Web/API/Blob
    • 更新了答案!
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多