Да, вы можете! Ключ здесь заключается в том, чтобы иметь в виду, что создание привязки эффективно добавляет элемент управления содержимым в документ, поэтому вам нужно использовать коллекцию contentControls, применяемую либо к выбору, либо к телу документа, и пройти его, чтобы получить порядок чтения. (btw не ясно из вашего вопроса, если вам нужно только на выбор или весь документ, но я объясню, как).
Теперь несколько уточнений до образца:
- Действительно, метод bindings.getAllAsync() не совпадает с порядком чтения, но его не случайным либо. Он фактически возвращает привязки в своем порядке создания, что кажется нецелесообразным для вашего сценария.
- С другой стороны, коллекция range.contentControls (диапазон может быть выбором или телом документа) предоставит вам все элементы управления содержимым в пределах диапазона в порядке чтения документа. Обратите внимание, что эта коллекция будет включать как элементы управления содержимым с привязками и без них. Поэтому вам нужно убедиться, что когда вы создаете привязки, вы делаете это так, чтобы впоследствии их узнавать, это просто сделать, поскольку с помощью нового API вы можете вставить элемент управления контентом, настроить его заголовок а затем используйте метод bindings.addFromNamedItemAsync для создания привязки с использованием заголовка. Вы также можете настроить тег элемента управления содержимым для идентификации в контексте вашего решения, которое представляет собой привязку.
Вот пример того, как можно создать элементы управления содержимым и добавить привязку к ним, а затем другой, показывающий, как использовать коллекцию 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);
})
}
Надеюсь, это добавляет ясности и разблокирует свой сценарий. Спасибо и счастливое кодирование! Хуан.
возможно? – Marcin
Привет! Интересные вопросы, мне нужно некоторое разъяснение. 1) Что вы подразумеваете под иерархией? вы имеете в виду порядок, в котором привязки находятся в порядке чтения документа? (сверху вниз) 2. Не уверен, что я понимаю, что «сохранить весь выделенный текст в списке привязок», чтобы у вас в вашем примере было 3 привязки? только одна привязка? Ваш вопрос о получении привязок в пределах выбора в порядке чтения? Просьба уточнить, поэтому я могу дать лучшее руководство. благодаря! –
- «вы имеете в виду порядок, в котором привязки находятся в порядке чтения документа» - да, сверху-> вниз; - «так что у вас в вашем примере 3 привязки» -> да, у меня есть 3 привязки (3 объекта Office.Binding); Мне нужен список всех привязок, которые привязки находятся в порядке чтения документа - это возможно? – Marcin