针对Word Online,但Excel / PPT的任何指针也会有所帮助。
基本上,是否可以将绑定对象中的文本视为范围?因此,能够选择它以及将插入符号移动到开头/结尾。
我正在设想代码可以产生以下效果:
Office.select(“myBindingID”, function error(){}).getAsRange().select(“End”);
答案 0 :(得分:1)
特定于主机的Office 2016+ API与" common"之间存在差异。 (2013)API。
在Excel中,绑定(以及来自公共API集的所有内容)都会暴露给新的OM,并与OM的其他方面(例如,Ranges)连接。那么,你绝对可以这样做:
await Excel.run(async (context) => {
let binding = context.workbook.bindings.getItem("TestBinding");
let range = binding.getRange();
range.load("address");
range.select();
await context.sync();
OfficeHelpers.UI.notify("Binding range address is " + range.address);
});
但是,在Word特定的API中,Word似乎不提供绑定支持。如果你想要倍加肯定,你可能想问一个单独的Stackoverflow问题,比如" WordApi(Office 2016+)是否支持Bindings?"。
对于Excel,您可以通过最近启动的脚本实验室工具(https://aka.ms/getscriptlab)以五次点击的方式尝试上述代码段的扩展版本。只需安装Script Lab加载项(免费),然后选择"导入"在导航菜单中,使用以下GIST网址:https://gist.github.com/Zlatkovsky/7701ceddae360ad3883ca867f3831a6f。请参阅more info about importing snippets to Script Lab。
<强>更新强>
关于@ codex关于是否可以将Office 2013方法(addFromPromptAsync
)与新的Office 2016浪潮API相结合的问题:是的。您可以将调用嵌套到2013回调中,但我个人更喜欢将其包装在Promise中,如下所示(参见代码的上半部分),然后使用Excel.run
作为新的API(与之相同)我以前用过的东西):
await new Promise((resolve, reject) => {
Office.context.document.bindings.addFromPromptAsync(
Office.BindingType.Matrix,
{ id: "TestBinding" },
(result) => {
if (result.status === Office.AsyncResultStatus.Succeeded) {
resolve();
} else {
reject();
}
}
)
})
await Excel.run(async (context) => {
let binding = context.workbook.bindings.getItem("TestBinding");
let range = binding.getRange();
range.load("address");
range.select();
await context.sync();
OfficeHelpers.UI.notify("Binding range address is " + range.address);
});
您可以使用脚本实验室,与上述相同的说明,在https://gist.github.com/Zlatkovsky/24f2297cecea181edcc165c6c0df6da0
进行试用PS:如果您不熟悉使用Promises包装回调,那么有一章专门介绍JS / TS和Promises Primer - 包括一个专门关于创建新Promise的部分 - 在书中#34 ;使用Office.js构建Office加载项&#34; (https://leanpub.com/buildingofficeaddins)。免责声明,我是该书的作者;但我确实认为读者会发现它有很多价值,无论是开始使用JS / TS / Promise概念,还是对于&#34;肉类&#34;本书的内容 - 关于组成Office 2016浪潮的核心概念。