我们正在为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);
}
}
答案 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");
});
});
});
}