在相反的平台中无法识别Office.js绑定(Office Online与Office Desktop)

时间:2018-03-27 18:58:40

标签: javascript excel reactjs ms-word office-js

我们正在为Excel和Word开发javascript office Add-Ins。我们的用户将使用Office Desktop和Office Online。

当用户在加载项中创建新记录时,我们会在当前具有焦点的范围上创建绑定。绑定正在创建并且看起来很好,但是如果用户在Office Desktop中创建绑定,并且稍后在Office Online中打开文档,则无法识别绑定。反之亦然,如果在Office Online中创建绑定,则以后不会被Desktop识别。

有更好的方法吗?

有关Excel中的示例,请参阅下面的代码:

addNote() {
  try {
    Excel.run((ctx) => {
      const selectedRange = ctx.workbook.getSelectedRange();
      selectedRange.load('address');

      return ctx.sync().then(() => {
        const currentAddress = selectedRange.address;
        this.setState({ currentAddress });

        const bindingName = `SymphonyBinding_${newGuid()}`;
        const myBindings = Office.context.document.bindings;
        this.setState({ bindingName });
        myBindings.addFromNamedItemAsync(currentAddress, 'matrix', { id: bindingName },
          (result) => {
            if (result.status === 'succeeded') {
              this.setState({ bindingName: result.value.id });
              meow.raise({ name: 'create-new-note', context: { tags: [result.value.id] } });
            } else {
              this.setState({ bindingName: 'could not bind' });
            }
          });
      });
    });
  } catch (error) {
    handleError('Office Add-In', error, error.message);
  }
}

以下是识别绑定的代码:

showNoteRequested({ context }) {
  const { note } = context;
  note.tags.forEach((tag) => {
    if (tag.name.indexOf('SymphonyBinding_') !== -1) {
      this.setState({ bindingName: tag.name }, this.selectRange);
    }
  });
}

selectRange() {
  const { bindingName } = this.state;
  try {
    Excel.run((ctx) => {
      const foundBinding = ctx.workbook.bindings.getItem(bindingName);
      const myRange = foundBinding.getRange();
      myRange.select();
      myRange.load('address');
      return ctx.sync().then(() => {
        const currentAddress = myRange.address;
        this.setState({ currentAddress });
      });
    });
  } catch (error) {
    handleError('Office Add-In', error, error.message);
  }
}

1 个答案:

答案 0 :(得分:0)

以下绑定创建代码是否与addNode中的相同?在Excel Online build 16.0.9229.5030中加载文件时,它似乎对我很好。

function run() {
    return Excel.run(function (ctx) {
        const selectedRange = ctx.workbook.getSelectedRange();
        selectedRange.load('address');

        return ctx.sync().then(() => {
            const currentAddress = selectedRange.address;
            const bindingName = 'SymphonyBinding_{493332C3-F66B-41BF-B37E-8E28D045E2F0}';
            const myBindings = Office.context.document.bindings;
            console.log("binding name" + bindingName);
            myBindings.addFromNamedItemAsync(currentAddress, 'matrix', { id: bindingName },
                (result) => {
                    console.log("binding created");
                });
        });
    });
}