Excel JavaScript API:计算context.sync()负载及检测缓存阈值
如何检测Excel JavaScript API的Context是否即将达到负载上限?
能不能检测Excel context是否即将“满载”,而非靠随机猜测同步时机?
我在用Excel JavaScript API开发加载项,网页版Excel中,以下简化代码在末尾的await context.sync()处抛出错误:
async function setAndFormat(address, values, formats) { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("foo") const range = sheet.getRange(address) // 设置值 range.values = values // await context.sync() // 重置格式 range.format.fill.clear() range.format.font.bold = false range.format.font.color = "#000000" // await context.sync() for (const format of formats) { // 创建新区域并设置各类格式属性 applyFormat(sheet, format) // await context.sync() } try { await context.sync() } catch (e) { showError(e) } }) } /* RichApi.Error: 请求负载大小已超过限制。 请参考文档: "https://docs.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#excel-add-ins". */
当values包含40000个数字,且formats会生成10000+个区域、20000+个单元格格式修改时,就会抛出上述RichApi.Error。
根据文档,请求和响应的负载大小限制为5MB,但我不知道该如何计算或估算这个值。目前只能通过试错设置同步阈值,但效果不好还会影响性能。
我希望实现如下功能:
// 如果负载超过4.5MiB则刷新缓存,默认阈值为4.5MiB async function flushContextIfOverLimit(context, limit = 4.5 * 2**20) { if (calculatePayloadSizeForContext(context) > limit) { return await context.sync() } }
但不确定如何编写calculatePayloadSizeForContext()函数,尝试追踪库中计算请求体大小的逻辑但没找到。
内容的提问来源于stack exchange,提问作者Phrogz
相关产品推荐
相关产品推荐

