如何根据MS Office Word Addin的格式特征找到文本?
例如:在我当前的选择中查找所有粗体文本范围;在我当前的选择中找到所有斜体文本范围;在我当前的选择中查找所有大写单词范围。
Word.run(function (context) {
var range = context.document.getSelection();
context.load(range, ['text', 'font']);
return context.sync()
.then(function(){
// This will find me the TEXTUAL words, but not the reference
// to the word object so I can operate on it (like change formatting)
// And it doesn't help me with searching based on <b>bold</b> bits.
var resultCaps = range.text.match(/(?=[A-Z0-9])([A-Z0-9\s]{2,})/g);
console.log(resultCaps);
});
}
&#13;
编辑:根据目前提供的帮助更新了问题......
根据格式进行搜索会变得更难,因为某些范围不是以粗体文本开头,而是包含粗体内容。例如&#34; [ FRED ]&#34;没关系,但是&#34; [ FRED ]&#34;不是。 (使用getTextRanges()进行拆分时)
有没有办法将每个范围拆分成单个字符getTextRanges(???)
然后重新组合成单词?
例如:
Word.run(function (context) {
var words = context.document.getSelection().getTextRanges([' '], true);
context.load(words, ['text', 'font']);
var boldRanges = [];
return context.sync()
.then(function(){
for (var i =0; i < words.items.length; ++i) {
var word = words.items[i];
if (word.font.bold)
boldRanges.push(word);
}
})
.then(function () {
for (var j = 0; j < boldRanges.length; ++j) {
boldRanges[j].font.highlightColor = '#FF00FF';
}
});
});
&#13;
答案 0 :(得分:1)
没有&#34;字&#34;对象,与Range对象不同。 Range对象具有格式化属性。获取表示所选范围中的概念词的Range对象的一种方法是对从getSelection返回的Range对象使用Range.getTextRanges()方法。您可以将空格字符作为分隔符传递给getTextRanges()。 E.g:
var wordRanges = myRange.getTextRanges([' '], true);
然后你循环遍历wordRanges,用这样的东西寻找粗体字:
wordRangesInParagraphs.forEach(function (wordRangesInSingleParagraph) {
wordRangesInSingleParagraph.items.forEach(function (word, index) {
// stuffed snipped
if (word.font.bold) {
// do work on the bold words
}
}
}
此代码来自Office Add-in示例中的此文件,用于查找粗体文本,但它是一个非常长的文件,因此您必须搜索以查找调用getTextRanges的位置以及结果的位置用来。