我有一个MS Word文档,其中的目录,使用标题1到标题4建立,是一个超过100个项目的层次结构。
我想使用Office JS开发一个插件,将这些文档作为一组页面导入到WordPress中,这些页面的层次结构与目录的层次结构相同。
每个WP页面将包含每个标题级别下的所有段落的HTML。
我是一个真正的Office JS初学者。看着所提供的示例,我已经能够将文档中所有段落的大纲级别记录到控制台,但我被HTML卡住了。
我想这可能是因为我对context.sync()的理解有误。这是我的代码。
$("#exportToCMS").click(() => tryCatch(exportToCMS));
function exportToCMS() {
return Word.run(function (context) {
// Create a proxy object for the paragraphs collection
var paragraphs = context.document.body.paragraphs;
// Queue a command to load the outline level property for all of the paragraphs
paragraphs.load("outlineLevel");
return context.sync().then(function () {
// Queue a a set of commands to get the HTML of each paragraph.
paragraphs.items.forEach((paragraph) => {
// Queue a command to get the HTML of the paragraph.
var ooxml = paragraph.getOoxml();
return context.sync().then(function () {
console.log(ooxml.value);
console.log(paragraph.outlineLevel);
});
});
});
});
}
/** Default helper for invoking an action and handling errors. */
function tryCatch(callback) {
Promise.resolve()
.then(callback)
.catch(function (error) {
console.error(error);
});
}
如果我对记录oxml.value的那一行进行注释,脚本就能正常运行。
如果不加注释,我得到一个错误 "Unhandled promise rejection"。
感谢任何建议。
承诺链断裂是常见的,当你有一个 context.sync
在一个循环里面。从性能的角度来看,这也是不好的。修正你的代码的第一步是让你的代码中的 context.sync
不在 forEach
遵循本文的指导来实现循环。避免在循环中使用context.sync方法.