我无法在函数的本地范围内访问工作表名称。
我有什么遗失的吗?
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;
});
});
答案 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
只是一个代理对象,直到您加载并同步。当您想要读取对象的属性时,必须加载它并同步以将要从文档中读取的对象属性带到加载项。