在 Excel 添加中使用 运行 和请求上下文的正确方法

Right way to use Run and Request Context in Excel Add In

我正在探索 excel JS API 并希望有一个推荐的结构来编写代码。我想了解以下代码片段之间的区别是什么,哪个是更好的选择。

  1. 创建一个 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();
});
  1. 创建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
}
  1. 创建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) => {

   });
});
  1. 我认为嵌套 Excel.run 调用通常不是一个好主意。如果这样做,则应等待内部调用。

  2. 对于您的代码段 #2,您不需要 populateTable 方法中的 context.sync,因为您将在该方法完成后立即调用它。

  3. 我认为您的代码段 #1 是最佳策略,但我认为您不需要第一个 context.sync。您可以在一次同步中创建和填充 table。