gpt4 book ai didi

javascript - 如何避免在 office-js 中使用过多的 context.loads()

转载 作者:行者123 更新时间:2023-11-29 20:57:19 31 4
gpt4 key购买 nike

我读过 Michael Zlatkovsky 非常出色的“Building Office Add-ins”,他说的其中一件事是试图避免对 context.load()< 的昂贵的 async 调用。他提到他很难找到需要超过 2 个的场景。

我的问题是:如果处理整个文档中的所有段落,我需要获取一些嵌套非常深的元素(例如 document.paragraphs.paragraph.listItem.siblingIndex)。如果我从文档开始,我能看到的唯一方法是:

paragraphs =  context.document.body.paragraphs;
paragraphs.load("items");
await context.sync();
for (var i =0; i<paragraphs.items.length; i++){
paragraphs.items[i].load("listItemOrNullObject");
}
await context.sync();

//.... Then iterate through every item in paragraph to load(siblingIndex)

await context.sync();

//finally am able to process stuff that requires properties from all nested levels

这是解决此问题的正确方法吗?即为每个需要属性的嵌套级别调用一个 sync() ?似乎对 sync() 的许多异步调用。这是可以避免的吗?我想这是一个常见的用例。

最佳答案

您可以通过在传递给加载方法的参数中使用正斜杠从深层加载属性。此技术允许您使用单个 context.sync() 加载嵌套级别。

以下代码来自您提到的同一本书,获取所有工作表中所有表中所有列的 name 属性:

Excel.run(async (context) => {
workbook.load("worksheets/tables/columns/name");

await context.sync();

var secondColumnOfFirstTableOnThirdSheet =
workbook
.worksheets.items[2]
.tables.items[0]
.columns.items[1];

console.log("The ridiculously-nested column name was " +
secondColumnOfFirstTableOnThirdSheet.name);

}).catch(...);

关于javascript - 如何避免在 office-js 中使用过多的 context.loads(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48634531/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com