【问题标题】:Is there a way to delete a section break in Word-js?有没有办法删除 Word-js 中的分节符?
【发布时间】:2020-04-08 18:27:18
【问题描述】:

我正在使用生成索引的 office-js 编写 Word 加载项。它使用以下代码在文档末尾创建分节符,然后在此处写入索引:

function WriteIndex() {
   Word.run(function (context) {
   //
   var html = GenerateIndex(); // generate the index as an html string
   //
   if (html.length > 0) {
      var body = context.document.body;
      body.insertBreak(Word.BreakType.sectionNext, Word.InsertLocation.end);
      body.select("End"); // put it at the end
      return context.sync().then(function () {
         body = context.document.body;
         body.select("End"); // put it at the end
         body.insertHtml(html, Word.InsertLocation.end);
         return context.sync();
      });
    }).catch(handleError);
} 

到目前为止,一切都很好——它就像我想要的那样工作。但现在我希望能够重新运行该函数并删除在重新生成和重写之前存在的索引。

我想我可以将索引的内容放入一个范围并删除它。但是我在 API 中找不到可以删除分节符的任何地方。我在link 找到了一些代码,它遍历文档部分集合并收集 all 部分的内容,然后仅用所需部分替换文档的全部内容。但这种方法对我来说既冒险又令人费解。另一种方法可能是本质上导航到文档的末尾并执行退格操作,因为这是您使用 Word UI 删除分节符的方式,但我在 API 文档中也找不到任何内容来执行此操作。

API 是否允许您创建分节符但不允许您删除它们?有没有人做过这样的事情?有更好的方法吗?

非常感谢。

【问题讨论】:

    标签: javascript ms-word office-js word-addins


    【解决方案1】:

    是的,这有点绕,但可以做到。

    正如您所说,实际的分节符似乎不是section.bodyRange 的一部分。因此,诀窍是在此之前的位置,在 prior 部分范围的末尾,如下面的代码 sn-p 所示。 (在 ScriptLab 中测试。)

        const doc = context.document;
        const secs = doc.sections;
        secs.load("items");
        await context.sync();
    
        //console.log(secs.items.length.toString());
        const nrSecs = secs.items.length - 1;
        const sect = secs.items[nrSecs];
        const secPrev = secs.items[nrSecs-1];
    
        //console.log(sect.isNullObject);
    
       var sectRng = sect.body.getRange("Content");
       const secStart = secPrev.body.getRange("End");
       var sectAll = secStart.expandTo(sectRng);
       sectAll.delete ();
    
        await context.sync();
    

    【讨论】:

    • 这很好用!非常感谢。我不得不四处寻找如何将打字稿代码集成到 Javascript 中。我还添加了 secs.items.length 大于 1 的测试,并且需要添加最后一部分确实是索引的测试,这样我就不会无意中删除其他最后一部分,但再次感谢。跨度>
    【解决方案2】:

    为了将来参考,这里是我的 js 版本(作为答案添加只是因为代码超过了评论字符限制——Cindy Meister 应该得到答案,而不是我)。我在调用这个的函数中加入了索引部分是否存在的测试,因为它通常与其他部分无关:

         function RemoveLastSection() {
        Word.run(function (context) {
            var doc = context.document;
            var secs = doc.sections;
            secs.load("items");
            context.sync().then(function () {
                if (secs.items.length > 1) {
                    var nrSecs = secs.items.length - 1;
                    var sect = secs.items[nrSecs];
                    var secPrev = secs.items[nrSecs - 1];
                    var sectRng = sect.body.getRange("Content");
                    var secStart = secPrev.body.getRange("End");
                    var sectAll = secStart.expandTo(sectRng);
                    sectAll["delete"]();
                }
                return context.sync();
            });
            return context.sync();
        }).catch(handleError)
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 2012-06-01
      • 1970-01-01
      • 2010-10-29
      • 2010-11-23
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多