0

因此,我正在 Office 应用程序中通过这个非常不发达的 JavaScript API 工作,并且我试图弄清楚如何获得对象父级。具体来说,如何从范围中获取工作表,或从表格中获取工作表,但也可以是图表中的工作表,工作表中的工作簿等。我还没有找到任何示例代码可以做到这一点。感谢任何帮助!

4

3 回答 3

3

要添加到 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")

于 2015-11-19T17:33:58.770 回答
1

虽然没有通用的机制来获取对象的父对象,但在某些情况下有一种方法可以做到:

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

Chart另一方面,没有任何指向其父级的反向指针,因此在这种情况下您无能为力。虽然您的反馈已得到适当记录,但请随时在Office 可扩展性平台的 UserVoice上请求此类 API/机制。

Gabriel Royer - Microsoft Office 可扩展性团队的开发人员

于 2015-11-19T03:22:18.720 回答
-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);
});
于 2017-05-04T10:27:00.313 回答