在OfficeJS中,您可以检索绑定对象的范围吗?

时间:2017-06-07 20:13:40

标签: office365 office-js

针对Word Online,但Excel / PPT的任何指针也会有所帮助。

基本上,是否可以将绑定对象中的文本视为范围?因此,能够选择它以及将插入符号移动到开头/结尾。

我正在设想代码可以产生以下效果:

Office.select(“myBindingID”, function error(){}).getAsRange().select(“End”);

1 个答案:

答案 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浪潮的核心概念。