对面平台无法识别 Office.js 绑定(Office Online 与 Office Desktop)
Posted
技术标签:
【中文标题】对面平台无法识别 Office.js 绑定(Office Online 与 Office Desktop)【英文标题】:Office.js Bindings Not Recognized in Opposite Platform (Office Online vs Office Desktop) 【发布时间】:2018-09-06 07:32:01 【问题描述】:我们正在为 Excel 和 Word 开发 javascript office 插件。我们的用户将使用 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);
【问题讨论】:
您能展示一下尝试识别绑定的代码吗? 如何在每个环境中加载加载项(旁加载?集中部署?) 我们测试了两种方法 - 侧载清单文件和适用于 Office SharePoint 目录的应用程序。 你试过word富客户端/在线吗?我已经修复了 word online 的类似问题,所以我认为你不应该在 word 上看到这个问题。 尝试使用Centralized Deployment。设置/绑定通过加载项的 ID 存储在文档中,并且旁加载的加载项会在安装时获得一个随机 ID。集中部署确保它们都使用相同的 ID: 【参考方案1】:以下绑定创建代码是否等同于您在 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");
);
);
);
【讨论】:
以上是关于对面平台无法识别 Office.js 绑定(Office Online 与 Office Desktop)的主要内容,如果未能解决你的问题,请参考以下文章
jQuery的.click,.bind,.unbind,.on,.off,.delegate,.undelegate