如何用Office JS获取Word文档各段的HTML?

问题描述 投票:0回答:1

我有一个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"。

感谢任何建议。

wordpress office-js word
1个回答
0
投票

承诺链断裂是常见的,当你有一个 context.sync 在一个循环里面。从性能的角度来看,这也是不好的。修正你的代码的第一步是让你的代码中的 context.sync 不在 forEach 遵循本文的指导来实现循环。避免在循环中使用context.sync方法.

© www.soinside.com 2019 - 2024. All rights reserved.