javascript - Google App Script - 合并多个文档,删除所有换行符并通过电子邮件以 pdf 形式发送

标签 javascript google-apps-script merge

我正在使用 Google App 脚本,并已成功将一个文件夹中的多个文档合并到一个文档中,并删除所有换行符,同时保持所有样式不变。

我需要一些帮助的是,在removeMultipleLineBreaks(element)函数完成后如何通过邮件发送文档。

有人可以帮我存档这个吗: (这是连接到表单的电子表格脚本,电子表格接收表单响应)

onFormSubmit 触发mergeDocument。合并所有文档后,删除MultipleLineBreaks,完成后,使用表单中提交的电子邮件将文档的 pdf 版本发送给用户。

这是正在运行的脚本代码。

function mergeGoogleDocs() {
// set folder ID were we should look for files to merge  
  var folder = DriveApp.getFolderById('0BwqMAWnXi8hMmljM3FZpaowb1'); 
  var docIDs = [];
  var files = folder.getFiles();

  while (files.hasNext()){
    file = files.next();
    docIDs.push(file.getId());
  }
// check if we have some ids  
  Logger.log(docIDs); 
// set document id of doc which will contain all merged documents  
  var baseDoc = DocumentApp.openById('0BwqMAWnXi8hMmljM3FZpaowb1');
// clear the whole document and start with empty page
  baseDoc.getBody().clear();
  var body = baseDoc.getActiveSection();

  for (var i = 1; i < docIDs.length; ++i ) {
    var otherBody = DocumentApp.openById(docIDs[i]).getActiveSection();    
    var totalElements = otherBody.getNumChildren();
    for( var j = 0; j < totalElements; ++j ) {
      var element = otherBody.getChild(j).copy();
      var type = element.getType();
      if( type == DocumentApp.ElementType.PARAGRAPH )
        body.appendParagraph(element);
      else if( type == DocumentApp.ElementType.TABLE )
        body.appendTable(element);
      else if( type == DocumentApp.ElementType.LIST_ITEM )
        body.appendListItem(element);
      else
        throw new Error("Unknown element type: "+type);
    }
  }
// after merging all docs, invoke function to remove all line breaks in the just merged document
  removeMultipleLineBreaks();
}


function removeMultipleLineBreaks(element) {
  if (!element) {
    // set document id of doc where to remove all line breaks 
    element = DocumentApp.openById('0BwqMAWnXi8hMmljM3FZpaowb1').getBody();
  }
  var parent = element.getParent();
  // Remove empty paragraphs
  if (element.getType() == DocumentApp.ElementType.PARAGRAPH 
      && element.asParagraph().getText().replace(/\s/g, '') == '') {
    if (!(parent.getType() == DocumentApp.ElementType.BODY_SECTION 
         && parent.getChildIndex(element) == parent.getNumChildren() - 1)) {
      element.removeFromParent();
    }
  // Remove duplicate newlines in text
  } else if (element.getType() == DocumentApp.ElementType.TEXT) {
    var text = element.asText();
    var content = text.getText();
    var matches;
    // Remove duplicate carriage returns within text.
    if (matches = content.match(/\r\s*\r/g)) {
      for (var i = matches.length - 1; i >= 0; i--) {
        var match = matches[i];
        var startIndex = content.lastIndexOf(match);
        var endIndexInclusive = startIndex + match.length - 1;
        text.deleteText(startIndex + 1, endIndexInclusive);
      }
    }
    // Grab the text again.
    content = text.getText();
    // Remove carriage returns at the end of the text.
    if (matches = content.match(/\r\s*$/)) {
      var match = matches[0];
      text.deleteText(content.length - match.length, content.length - 1);
    }
    // Remove carriage returns at the start of the text.
    if (matches = content.match(/^\s*\r/)) {
      var match = matches[0];
      text.deleteText(0, match.length - 1);
    }
  // Recursively look in child elements
  } else if (element.getNumChildren) {
    for (var i = element.getNumChildren() - 1; i >= 0; i--) {
      var child = element.getChild(i);
      removeMultipleLineBreaks(child);
    }
  }
}

最佳答案

调用电子邮件功能:

  }
  // after merging all docs, invoke function to remove all line breaks in the just merged document
  removeMultipleLineBreaks();

  //email document
  emailDocument();
}

电子邮件功能:

function emailDocument() {
  //Replace this email address with your own email address
  var email = "sample@email.com"; 

  var fileToAttach = DriveApp.getFileById('Put your file ID here').getAs('application/pdf');

  var message = "This is a test message";
  var subject = "New Merged Document";

 // Send an email with an attachment: a file from Google Drive
 MailApp.sendEmail(email, subject, message, {
     attachments: [fileToAttach]
 });
}

关于javascript - Google App Script - 合并多个文档,删除所有换行符并通过电子邮件以 pdf 形式发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032656/

相关文章:

javascript - 有没有办法使用 javascript 将 <td> 添加到每个表格行

javascript - Google Apps 脚本 (JavaScript) 正则表达式拆分电子表格单元格引用

javascript - 在 Google Apps 脚本中使用 Crypto-JS - 什么是 C.lib?

google-apps-script - 在 Google-Apps-Script 中使用 Directory API,如何在组内获取组

git - git rebase --onto --preserve-merges再现了我已经在 merge 中解决的冲突

git - 使用 Git merge Unity 3D 场景

javascript - 单击时更改 div 的背景图像

javascript - 使用 MomentJS 的 Javascript 中的无效日期

javascript - 尝试隐藏文档,直到它被 JavaScript 更新

sql - 将数据合并到两个目标表中