0

我正在尝试从数组中的所有工作表中获取给定范围的每个单元格的值(范围在数组(rangeAdd)中并以“M1:T14”的形式)(一张工作表的值应在一行数组中)。我的代码如下,

async function getDataFromEachSheet(rangeAdd) {
  await Excel.run(async (context) => {
    var sheets = context.workbook.worksheets;
    sheets.load("items/name");
    await context.sync();
    sheets.items.forEach( (sheet) =>{
      var a =[]
      for (const currentRange of rangeAdd) {
        var range = sheet.getRange(currentRange);
        range.load("values");
        context.sync();
        console.log(range.values)
        var arr = [];
        arr = range.values
        var a = arr.join().split(',')
      }
    });
  });
}

我得到
1.“未处理的承诺拒绝”和
2.“属性 'values' 不可用。在读取属性的值之前,请在包含对象上调用 load 方法并在关联请求上调用“context.sync()”语境。”
我无法使用 await context.sync() 而不是 context.sync();

4

2 回答 2

0

而不是使用await context.sync()你可以尝试使用return context.sync().then(). 所以更新后的代码可能看起来像这样:

async function getDataFromEachSheet(rangeAdd) {
  await Excel.run(async (context) => {
    var sheets = context.workbook.worksheets;
    sheets.load("items/name");
    await context.sync();
    sheets.items.forEach((sheet) => {
      var a = []
      for (const currentRange of rangeAdd) {
        var range = sheet.getRange(currentRange);
        range.load("values");
        return context.sync().then(()=>{
          console.log(range.values)
          var arr = [];
          arr = range.values
          var a = arr.join().split(',')
        })
      }
    });
  });
}
于 2021-08-01T16:53:24.257 回答
0

借助避免在循环中使用 context.sync 方法https://docs.microsoft.com/en-us/office/dev/add-ins/concepts/correlated-objects-pattern。我已经设法使用以下代码获取值。

    async function getDataFromEachSheet(rangeAdd) {
      try {
      await Excel.run(async (context) => {
        const sheets = context.workbook.worksheets.load("items/name");
        await context.sync();
        var rangeObj = [];
        sheets.items.forEach((sheet) => {
          rangeAdd.forEach((currentRange) => {
            const range = sheet.getRange(currentRange).load("values") ;
            rangeObj.push(range);
          });
        });
        await context.sync();
        console.log(rangeObj)
      })
      }
      catch (error) {
        console.error(error);
        }
     }
于 2021-08-02T16:26:07.053 回答