在 Excel 添加中使用 运行 和请求上下文的正确方法
Right way to use Run and Request Context in Excel Add In
我正在探索 excel JS API 并希望有一个推荐的结构来编写代码。我想了解以下代码片段之间的区别是什么,哪个是更好的选择。
- 创建一个 table,等待获取数据,填充 table,同步,运行 批处理结束。
Excel.run((context) => {
const table = // add a table
context.sync(); // sync so that table is added to sheet (optional)
// wait for data to be loaded from remote
const data = await fetch() // make a request to fetch remote data (takes long time ~3+s)
// populate table with data fetched
return context.sync();
});
- 创建table,不要等待获取数据完成,同步,运行批次结束。加载数据后填充 table(没有新的 运行 批次)。
Excel.run((context) => {
const table = // add a table
fetch().then((data) => populateTable(data, table)) // make a request to fetch remote data (takes long time ~3+s)
return context.sync();
});
function populateTable(data, table) {
// populate table with data fetched
table.context.sync(); // sync
}
- 创建table,不要等待获取数据完成,同步,运行批次结束。加载数据后填充 table(使用新的 运行 批次)。
Excel.run((context) => {
const table = // add a table
fetch().then((data) => populateTable(data)) // make a request to fetch remote data (takes long time ~3+s)
return context.sync();
});
function populateTable(data) {
Excel.run((context) => {
const table = context.workbook.table.getItem('MyTable');
// populate table with data fetched
table.context.sync(); // sync
});
}
如果我们尝试在相应的 运行 完成后访问上下文会发生什么(这是错误的)?
是否应该在返回之前等待 运行 中的所有异步操作?如果是这样的话运行完成需要很长时间会不会有什么麻烦?
嵌套 运行 语句(如下所示同步调用)是什么意思?
Excel.run((context) => {
Excel.run((context1) => {
});
Excel.run((context2) => {
});
});
我认为嵌套 Excel.run 调用通常不是一个好主意。如果这样做,则应等待内部调用。
对于您的代码段 #2,您不需要 populateTable 方法中的 context.sync,因为您将在该方法完成后立即调用它。
我认为您的代码段 #1 是最佳策略,但我认为您不需要第一个 context.sync。您可以在一次同步中创建和填充 table。
我正在探索 excel JS API 并希望有一个推荐的结构来编写代码。我想了解以下代码片段之间的区别是什么,哪个是更好的选择。
- 创建一个 table,等待获取数据,填充 table,同步,运行 批处理结束。
Excel.run((context) => {
const table = // add a table
context.sync(); // sync so that table is added to sheet (optional)
// wait for data to be loaded from remote
const data = await fetch() // make a request to fetch remote data (takes long time ~3+s)
// populate table with data fetched
return context.sync();
});
- 创建table,不要等待获取数据完成,同步,运行批次结束。加载数据后填充 table(没有新的 运行 批次)。
Excel.run((context) => {
const table = // add a table
fetch().then((data) => populateTable(data, table)) // make a request to fetch remote data (takes long time ~3+s)
return context.sync();
});
function populateTable(data, table) {
// populate table with data fetched
table.context.sync(); // sync
}
- 创建table,不要等待获取数据完成,同步,运行批次结束。加载数据后填充 table(使用新的 运行 批次)。
Excel.run((context) => {
const table = // add a table
fetch().then((data) => populateTable(data)) // make a request to fetch remote data (takes long time ~3+s)
return context.sync();
});
function populateTable(data) {
Excel.run((context) => {
const table = context.workbook.table.getItem('MyTable');
// populate table with data fetched
table.context.sync(); // sync
});
}
如果我们尝试在相应的 运行 完成后访问上下文会发生什么(这是错误的)?
是否应该在返回之前等待 运行 中的所有异步操作?如果是这样的话运行完成需要很长时间会不会有什么麻烦?
嵌套 运行 语句(如下所示同步调用)是什么意思?
Excel.run((context) => {
Excel.run((context1) => {
});
Excel.run((context2) => {
});
});
我认为嵌套 Excel.run 调用通常不是一个好主意。如果这样做,则应等待内部调用。
对于您的代码段 #2,您不需要 populateTable 方法中的 context.sync,因为您将在该方法完成后立即调用它。
我认为您的代码段 #1 是最佳策略,但我认为您不需要第一个 context.sync。您可以在一次同步中创建和填充 table。