Как найти и удалить пустые абзацы в документе Google с помощью скрипта Google Apps?

Я работаю с документами Google, которые содержат сотни пустых абзацев. Я хочу удалить эти пустые строки автоматически.

В LibreOffice Writer вы можете использовать инструмент Найти и заменить, чтобы заменить ^$ ни с чем, но это не сработало в Google Docs.

Мой поиск ^$ или же ^\s*$ вернул 0 результатов, хотя должно быть 3 совпадения

Как удалить пустые абзацы с помощью скрипта Google Apps?

Я уже пробовала body.findText("^$"); но это возвращает null

function removeBlankParagraphs(doc) {
    var body = doc.getBody();
    result = body.findText("^$");

}

3 ответа

Решение

Я думаю, что должен быть последний пустой абзац, но это, кажется, работает.

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();

  var paras = body.getParagraphs();
  var i = 0;

  for (var i = 0; i < paras.length; i++) {
       if (paras[i].getText() === ""){
          paras[i].removeFromParent()
       }
}
}

В дополнение к ответу Тома и комментарию apmouse, вот пересмотренное решение, которое: 1) предотвращает удаление абзацев, состоящих из изображений или горизонтальных правил; 2) также удаляет абзацы, которые содержат только пробелы.

function removeEmptyParagraphs() {
  var pars = DocumentApp.getActiveDocument().getBody().getParagraphs();
  // for each paragraph in the active document...
  pars.forEach(function(e) {
    // does the paragraph contain an image or a horizontal rule?
    // (you may want to add other element types to this check)
    no_img = e.findElement(DocumentApp.ElementType.INLINE_IMAGE)    === null;
    no_rul = e.findElement(DocumentApp.ElementType.HORIZONTAL_RULE) === null;
    // proceed if it only has text
    if (no_img && no_rul) {
      // clean up paragraphs that only contain whitespace
      e.replaceText("^\\s+$", "")
      // remove blank paragraphs
      if(e.getText() === "") {
        e.removeFromParent();
      }
    }    
  })
}
      function DeleteEmpty(doc)
{
  var body = doc.getBody();
  var paragraphs = body.getParagraphs();
  for (var i = 0; i < paragraphs.length; i++) {
      var paragraph = paragraphs[i];
      if (paragraph.getNumChildren() == 0 && paragraph.getPositionedImages().length == 0) {
        paragraph.removeFromParent();
      } 
  }
}

Это решение учитывает PositionedImages, которые отсутствовали в других решениях и могли быть удалены.

Другие вопросы по тегам