Excel JavaScript API:查找父对象

时间:2015-11-19 02:16:25

标签: excel office-js

所以我正在通过Office App中这个欠发达的JavaScript API工作,我正在试图找出如何获取父对象。具体来说,如何从范围中获取工作表,或从表中获取工作表,但也可以是图表中的工作表,工作表中的工作表等。我还没有找到执行此操作的任何示例代码。感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

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

escape("let's go");

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

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

PS:注意:上面的代码使用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); }); 方法,该方法是Office加载项的标准Visual Studio模板的一部分。如果您没有使用该模板,只需将此类调用替换为app.showNotification(title, text)

即可

答案 1 :(得分:1)

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

  • Range有一个worksheet property(示例可在页面末尾找到)
  • Table允许您通过其getRange() method获取其范围,然后您可以使用其worksheet属性获取表格的父工作表。
  • Worksheet - API用于单个工作簿,因此上下文中的workbook属性保证是工作表的父级。
另一方面,

Chart没有任何指向其父级的指针,因此在这种情况下你无能为力。虽然您的反馈得到了适当的注意,但请随时在Office Extensibility Platform's UserVoice上请求此类API /机制。

Gabriel Royer - Office可扩展性团队开发人员,MSFT

答案 2 :(得分:-1)

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