如何在不使用ws.load(" name")的情况下将工作表名称放入单元格中?

时间:2018-01-19 01:59:11

标签: excel office-js

我无法在函数的本地范围内访问工作表名称。

我有什么遗失的吗?

      Excel.run(function (context) {

          //get the active worksheet
          var ws = context.workbook.worksheets.getActiveWorksheet()

          /* this code does not work
          var range = context.workbook.getSelectedRange();
          range.values = ws.name;
          */

          //this will work
          ws.load("name");

          return context.sync()
              .then(function () {
                  var range2 = context.workbook.getSelectedRange();
                  range2.values = ws.name;
              });

      });

2 个答案:

答案 0 :(得分:1)

上面显示的代码几乎没有问题。您要描述的方案是将活动工作表名称分配给选定的单元格(假设用户只选择了单个单元格)。在使用工作表的name属性之前,您必须加载它并调用context.sync来执行指令。在此之前,加载项不知道工作表的实际值是什么。然后,将范围值指定为二维数组,因为单元格和范围基本上是Excel中的同一对象。我不知道你在代码中的.then()函数中想要做什么。在最后一次sync()调用之前,您可以很好地执行此操作,因为之前的调用之间没有依赖关系。下面的代码显示了您的要求的最重要部分。我只是使用等待语法而不是.then(基本上是相同的效果)。

async function run() {
    await Excel.run(async (context) => {
        const ws = context.workbook.worksheets.getActiveWorksheet();
        ws.load('name');
        await context.sync();
        const range = context.workbook.getSelectedRange();
        range.values = [[ws.name]];
        await context.sync();
    });
}

答案 1 :(得分:0)

我不认为你错过任何东西。这就是它应该如何工作。变量ws只是一个代理对象,直到您加载并同步。当您想要读取对象的属性时,必须加载它并同步以将要从文档中读取的对象属性带到加载项。