我正在尝试从JavaScript插件中设置所有选定段落的样式。该代码在Word Online中完美运行,但是当我在Word桌面中使用它时出现错误。代码如下(是的,我的测试样式称为“香蕉”,它的大而黄色):
function updateParStyle(event) {
Word.run(function (context) {
var range = context.document.getSelection();
range.load("paragraphs/items");
return context.sync().then(function () {
var items = range.paragraphs.items;
// console.log(items.length + " items");
for (var i = 0; i < items.length; i++) {
items[i].style = "Banana";
}
return context.sync();
});
}).catch(function (e) {
console.error(e);
return window.open("https://urldecode.org/?text=" + JSON.stringify(e));
});
event.completed();
}
在桌面Word中,我收到以下错误:
{
"name":"OfficeExtension.Error",
"code":"ItemNotFound",
"message":"ItemNotFound",
"traceMessages":[],
"debugInfo":{
"errorLocation":"ParagraphCollection.getItem"
},
"stack":"ItemNotFound: ItemNotFound\n at Anonymous function (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8103:6)\n at lib$es6$promise$$internal$$tryCatch (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8974:8)\n at lib$es6$promise$$internal$$invokeCallback (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8984:8)\n at lib$es6$promise$$internal$$publish (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8960:9)\n at lib$es6$promise$asap$$flush (https://appsforoffice.microsoft.com/lib/1/hosted/word-win32-16.01.debug.js:8779:8)"
}
调试显示在设置段落样式后context.sync
发生错误。正如在错误消息中可以看到的,我使用未经分析的office.js进行调试,但错误也发生在默认的office.js中,只是使用了一个不太有用的堆栈跟踪。如果我设置range.style = "Banana"
而不是使用适用于Word Online和Word桌面的段落。 “香蕉”风格是一种链接风格(所以它应该适用于段落和字符)。
使用items[i].style = "Banana"
或items[i].delete()
替换items[i].insertText("Hello world", "After")
时出现完全相同的错误,因此问题与样式本身无关。
我发现一个可能的解决方法是我可以在所选范围上设置段落样式,并且它将按预期工作(设置所有选定段落的样式,甚至是部分选择的段落的样式),但是我想象一下,我必须在某个时候使用ParagraphCollection
,所以我仍然想知道我做错了什么。
我已使用Word版本16.0.7341.2035和16.0.7167.2060进行了测试。
答案 0 :(得分:2)
有趣。我不确定我是否会这样编码。我可以建议您修改代码以适当地使用段落集合吗?我认为如果你这样做,你的代码将会大大简化:
Word.run(function(context) {
var pars = context.document.getSelection().paragraphs;
pars.load();
return context.sync().then(function () {
for (var i = 0; i < pars.items.length; i++) {
pars.items[i].style = "Banana";
}
return context.sync();
})
}).catch(function(error) {
console.log(error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
这段代码肯定适用于所有平台。 谢谢 涓。