【问题标题】:Office.Binding - sort bindings by hierarchy in the word document (angular)Office.Binding - 按 word 文档中的层次结构对绑定进行排序(角度)
【发布时间】:2017-01-29 09:15:44
【问题描述】:
                            Office.context.document.bindings.getAllAsync((result: Office.AsyncResult) => {             
                                if (result.status == Office.AsyncResultStatus.Succeeded) {
                                    for (let attBinding of result.value) {
                                        var binding = attBinding as Office.Binding;  
                                    }
                                } 
                            })

我们正在开发一个带有所选文本存储的 Office 应用。我们将所有选定的文本保存在绑定列表中。但是我们需要在整个文档中按范围选定的文本排序列表。但是函数 getAllAsync() 返回随机列表...

我们如何在文档中按层次结构对这些绑定进行排序?

例如:

Text1(首先选择) Text2(选择第三个) Text3(选中第二个)

--

我们需要像这样的排序列表:

  1. 文本1

  2. 文本2

  3. 文本3

不是随机列表!

【问题讨论】:

  • 有可能吗?
  • 您好!有趣的问题,虽然我需要一些澄清。 1)等级制度是什么意思?您是指绑定在文档阅读顺序中的顺序吗? (自上而下) 2. 不确定我是否理解“将所有选定的文本保存在绑定列表中”,所以您在示例 3 中使用了绑定?只有一个绑定?您是否有关于按阅读顺序获取所选内容中的绑定的问题?请澄清,以便我可以提供更好的指导。谢谢!
  • -“你指的是绑定在文档阅读顺序中的顺序”-是的,自上而下; - “所以你的示例中有 3 个绑定” -> 是的,我有 3 个绑定(Office.Binding 的 3 个对象);我需要所有绑定的列表,这些绑定按文档的阅读顺序排列 - 有可能吗?
  • 有可能吗?有什么想法吗?
  • 是的,抱歉耽搁了,请在下面查看我的答案...

标签: office365 office-js office365api office-addins word-addins


【解决方案1】:

是的,你可以!这里的关键是要记住,创建绑定实际上是向文档添​​加内容控件,因此您需要做的是使用应用于选择或文档正文的 contentControls 集合并遍历它以获取阅读顺序。 (顺便说一句,如果您只需要选择或所有文档,但我会解释两者)。

现在在示例之前进行一些澄清:

  1. 确实,bindings.getAllAsync() 方法与读取顺序不匹配,但也不是随机的。它实际上按其创建顺序返回绑定,这对您的方案似乎没有用处。
  2. 另一方面,range.contentControls 集合(范围可以是文档的选择或正文)将按照文档的阅读顺序为您提供范围内的所有内容控件。请注意,此集合将包括带有和不带有绑定的内容控件。所以你需要确保当你创建你的绑定时,你以一种你以后能够识别它们的方式来做这件事,这很简单,因为你可以使用新的 API 插入一个内容控件,设置它的标题然后使用bindings.addFromNamedItemAsync 方法使用标题创建绑定。您还可以设置内容控件的标记,以在解决方案的上下文中识别这表示绑定。

这是一个示例,说明如何创建内容控件并向它们添加 Binding,然后另一个示例显示如何使用 contentControls 集合以阅读顺序遍历绑定:

创建绑定:

function insertContentControlWithBinding() {
    Word.run(function (context) { 
        //first we insertTheContentCOntrol on the selection, then set the title and tags and finally create the binding.
        var myContentControl = context.document.getSelection().insertContentControl();
        context.load(myContentControl);
        return context.sync()
            .then(function () {
                myContentControl.title = "identifier"; //this will be used later to create the binding.
                myContentControl.tag = "BOUND"; //used to mark as a bound content control.
                return context.sync()
                    .then(function (context) {
                        Office.context.document.bindings.addFromNamedItemAsync("identifier", Office.BindingType.Text, {}, function (result) {
                            if (result.status = Office.AsyncResultStatus.Succeeded) {
                                console.log("binding Created succesfully")
                            }
                         })

                     })    
             })

    }).catch(function (e) { 
        console.log(e.message);
    })
}

按阅读顺序获取绑定:这确实是您问题的底线答案,但我认为对正在发生的事情进行很好的解释会很有用。谢谢你的耐心!

function getBindingsinReadingOrder() {
     Word.run(function (context) { 
        var myContentControls = context.document.body.contentControls; 
        context.load(myContentControls);
        return context.sync()
            .then(function () {
                // lets traverse the content controls and checl which ones are bound by checking the tag.
                for (var i = 0; i < myContentControls.items.length; i++) {
                    if (myContentControls.items[i].tag == "BOUND") {
                        //its a binding! lets print the content
                        console.log(myContentControls.items[i].text);
                    }
                    else {
                        console.log("not a bound cc");
                     }
                 }
             }) 
    }).catch(function (e) { 
        console.log(e.message);
    })
 }

希望这可以增加清晰度并消除您的场景障碍。 感谢和快乐编码! 胡安。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2020-12-25
    • 2016-05-21
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多