Excel JavaScript API:查找父对象

所以我正在通过Office应用程序中这个非常不完善的JavaScript API工作,并试图弄清楚如何获取对象父项。 具体来说,如何从一个范围或工作表中获取工作表,但也可以是图表中的工作表,工作表中的工作簿等。我还没有find任何示例代码来执行此操作。 感谢任何帮助!

添加到Gabriel Royer的答案,这里是一些代码示例:

Excel.run(function (ctx) { var range = ctx.workbook.getSelectedRange(); var worksheet = range.worksheet; worksheet.load("name"); return ctx.sync().then(function () { app.showNotification("Sheet name", worksheet.name); }); }).catch(function(e) { app.showNotification("Error", e); }); 

当然,上面的例子有点傻,因为你也可以做

 var worksheet = ctx.workbook.worksheets.getActiveWorksheet(); 

但是如果你使用一个命名的范围,这个示例变得更加真实:

 Excel.run(function(ctx) { var range = ctx.workbook.names.getItem("MyNamedRange").getRange(); var worksheet = range.getRange(); worksheet.load("name"); return ctx.sync().then(function() { app.showNotification("Sheet name", worksheet.name); }); }).catch(function(e) { app.showNotification("Error", e); }); 

对于一个表格,你可以通过下面的方法来确定它正在做什么:

 Excel.run(function(ctx) { var table = ctx.workbook.tables.getItem("Table1"); var worksheet = table.getRange().worksheet; worksheet.load("name"); return ctx.sync().then(function() { app.showNotification("Sheet name", worksheet.name); }); }).catch(function(e) { app.showNotification("Error", e); }); 

PS:注意:上面的代码使用了app.showNotification(title, text)方法,它是Office加载项的标准Visual Studio模板的一部分。 如果你没有使用模板,只要用console.log(title + " " + text")replaceconsole.log(title + " " + text")所有这样的调用

虽然没有一个共同的机制来获得一个对象的父母,但在某些情况下有这样做的方法:

  • Range有一个worksheet属性 (一个例子可以在页面的末尾find)
  • Table允许你通过getRange()方法得到它的范围,然后你可以使用它的worksheet属性来获取表的父工作表。
  • Worksheet – 这些API是针对单个工作簿的,因此上下文中的workbook属性保证是工作表的父项。

另一方面, Chart没有任何指向其父项的指针,所以在这种情况下你可以做的事情不多。 尽pipe您的反馈已得到充分注意,但请随时在Office Extensibility Platform的UserVoice上申请此类API /机制。

Gabriel Royer – MSFT办公室扩展团队的开发人员

 ## Loading the existing worksheet ## ---------- Excel.run(function(ctx) { var sheet=ctx.workbook.names.getItem("SheetName").getRange("Specify your range"); sheet.load("name"); return ctx.sync().then(function() { console.log("Sheet name", sheet.name); //getting the sheet name sheet.activate(); }); }).catch(function(e) { console.log("Error", e); });