【问题标题】:How to name and reference an Excel range using office.js如何使用 office.js 命名和引用 Excel 范围
【发布时间】:2016-07-19 22:16:17
【问题描述】:

我正在使用 office.js 库开发一个 Excel 插件,并且需要创建一些命名范围以便以后跟踪和访问。

但是根据 API 文档:

NamedItemCollection:https://github.com/OfficeDev/office-js-docs/blob/master/reference/excel/nameditemcollection.md

命名项目:https://github.com/OfficeDev/office-js-docs/blob/master/reference/excel/nameditem.md

没有创建命名项目的方法。

有没有办法使用 office.js 命名和引用 Excel 范围?谢谢。

【问题讨论】:

    标签: javascript ms-office office365 office-js


    【解决方案1】:

    没有办法在 Excel 中通过Office.js 命名范围。只有用户可以通过 Excel UI 命名范围。

    好消息是有不同的方法可以实现相同的目标:

    如果您想维护对范围的引用,则无需命名;它已经有了像Sheet1!A1:B10 这样的名称。

    如果您想保持对范围的引用,即使用户在其之前或内部添加/删除行/列,请使用Binding

    var myBindings = Office.context.document.bindings;
    var myAddress = "Sheet1!A1:B10";
    myBindings.addFromNamedItemAsync(myAddress, "matrix", {id:"myBind"}, function(result){});
    

    然后当您以后想访问该范围时,您可以:

    Excel.run(function (ctx) { 
        var foundBinding = ctx.workbook.bindings.getItem("myBind");
        var myRange = foundBinding.getRange();
        myRange.load('values');
        return ctx.sync().then(function() {
            console.log(myRange.values);
        });
    });
    

    -Michael Saunders,Office 插件产品经理

    【讨论】:

    • 这也可以用于在工作簿中创建依赖列表吗?
    【解决方案2】:

    Excel.NamedItemCollection 提供了一个 add() 方法来生成命名引用

    https://docs.microsoft.com/en-us/javascript/api/excel/excel.nameditemcollection?view=excel-js-preview

    【讨论】:

      【解决方案3】:
        async function addNameToHeader() {
          await Excel.run(async(context) => {
              const sheet = context.workbook.worksheets.getItem("Sample");
              const headerRange = sheet.getRange("A1:D1");
      
              sheet.names.add("ExpensesHeader", headerRange);
              const namedItems = sheet.names.load("name, type");
      
              await context.sync();
          });
      }
      
      async function formatRangeByName() {
          await Excel.run(async(context) => {
              const sheet = context.workbook.worksheets.getItem("Sample");
              const headerRowName = sheet.names.getItemOrNullObject("ExpensesHeader");
              headerRowName.load();
              await context.sync();
      
              if (headerRowName.value) {
                  const headerRange = headerRowName.getRange();
                  headerRange.format.fill.color = "red";
              } else {
                  console.log("No named item created for the range.");
              }
      
              await context.sync();
          });
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-07
        • 1970-01-01
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多