【问题标题】:get values from each sheet of workbook of range in JavaScript从 JavaScript 范围内的每张工作簿中获取值
【发布时间】:2021-08-03 00:26:07
【问题描述】:

我正在尝试从数组中的所有工作表中获取给定范围的每个单元格的值(范围在数组 (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();

【问题讨论】:

    标签: javascript excel office-js office-addins


    【解决方案1】:

    您可以尝试使用return context.sync().then(),而不是使用await context.sync()。因此更新后的代码可能如下所示:

    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(',')
            })
          }
        });
      });
    }
    

    【讨论】:

    • 感谢您的指导。在返回 context.sync().then() 之后,我只从第一张表的第一个范围中获取值。对于第一张纸和所有其他纸的其他范围,我得到了同样的错误。 1.“未处理的承诺拒绝”和 2.“属性“值”不可用。
    【解决方案2】:

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

        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);
            }
         }
    

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 1970-01-01
      • 2020-02-13
      • 2018-03-15
      • 2021-09-30
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多