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

2024-02-10

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

我需要一些帮助的是,在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 = "[email protected] /cdn-cgi/l/email-protection"; 

  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]
 });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何检测浏览器是否支持自定义元素

    我正在查看 Modernizr 它应该有助于功能检测 这应该可以帮助确定您的网站是否与给定的 Web 浏览器兼容 但我没有看到任何表明我可以使用它来检测自定义 HTML 的内容我们在内容中创建和定义的元素 如果不是 Modernizr 我如
  • JavaScript onTouch 不工作

    谁能告诉我为什么这个 onTouch 处理程序没有触发 var myDiv document getElementById existingContent var myButton a href log out a myDiv append
  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • 主干视图 DOM 元素已删除

    我一直在阅读有关 Backbone js 僵尸 或内存泄漏 问题的信息 基本上 当您不再需要该元素时 您必须从 DOM 中解除绑定并删除该元素 以确保所有事件也被删除 现在 我有一个包含几个容器的单页应用程序 div div div div
  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比

随机推荐

  • 找不到类“android.support.v4.widget.SwipeRefreshLayout”[重复]

    这个问题在这里已经有答案了 我不断收到此错误 它导致我的应用程序崩溃 尝试实现新的 v4 滑动刷新布局 我已经更新了支持库 sdk 问题是什么 找不到类 android support v4 widget SwipeRefreshLayou
  • 如何使用 boost.python 公开对齐的类

    当尝试像这样公开对齐的类时 class declspec align 16 foo public void foo method BOOST PYTHON MODULE foo module class
  • GWT 中共享包的重要性

    我意识到 GWt 不会编译不在客户端包中的类 但共享包的重要性是什么 我需要在这个包中放入哪些类 我需要上哪些课程 放入这个包中 客户端和服务器都使用的任何逻辑或数据类型 这将使您免于复制双方的代码 并可能保留逻辑和数据类型持续的
  • HttpRequestMessage 内容中的文件名

    我实现了 POST Rest 服务来将文件上传到我的服务器 我现在遇到的问题是我想按类型限制上传的文件 举例来说 我只想允许上传 pdf 文件 我试图做的是 Task
  • 从 Eclipse 菜单 Window -> Show View 中删除视图名称

    我需要删除从 窗口 gt 显示视图 菜单创建的视图的名称 快捷方式 并将它们添加为单独的菜单 有什么方法可以从 窗口 gt 显示视图 菜单中隐藏 删除其条目 您可以从 自定义透视 菜单可见性 选项卡的 显示视图 菜单中添加 删除任何视图 以
  • docker在aws ecs中运行程序参数

    我在 Amazon 的 ECS 中有一个工作容器 它将程序作为任务运行 我想传递一些程序参数 就像我在本地运行时所做的那样docker run 我已经成功地在 ECS 的容器配置中传递了一个新的入口点 就像我在docker run命令行 不
  • 由于定义顺序,常量初始化“令人惊讶”

    阅读时关于 constexpr 的幻灯片 http accu org content conf2007 Maurer C 0x Generating Constant Expression pdf简介是关于 使用 const 进行令人惊讶的
  • 在C语言中连接字符串,哪种方法更有效?

    我遇到了这两种连接字符串的方法 共同部分 char first First char second Second char both malloc strlen first strlen second 2 方法一 strcpy both f
  • Apple Watch:状态栏高度

    有人知道 Apple Watch 状态栏的大小吗 无论是在 Apple Watch 人机界面指南还是 Apple Watch 编程指南中 我都无法在文档中找到这样的价值 所以 我已经测量过它们了 38mm 19pt 38px 42mm 21
  • char* - 为什么指针中没有地址?

    我有一个基本问题char 我不明白 char aString Hello Stackoverflow 指针指向字符链的第一个字符 cout lt lt aString H 但为什么整个字符串都保存在指针中呢 cout lt lt aStri
  • 写入内存映射文件后,什么会更新 mtime?

    我在 Linux 上使用 XFS 并且有一个内存映射文件 每秒写入一次 我注意到文件 mtime 由watch ls full time 周期性但不规则地变化 mtimes之间的差距似乎在2到20秒之间 但并不一致 系统上几乎没有其他东西在
  • 如何在php中显示特定mysql数据库中的所有表名

    我正在尝试显示数据库中的所有表名 这是我的代码 所显示的一切1对于每个条目 我不知道为什
  • Dictionary.ContainsKey 返回 False,但想要 True

    namespace Dic public class Key string name public Key string n name n class Program static string Test Key a new Key A K
  • 如何使用Java程序连接MS Access数据库?

    我想编写一个程序来从 MS Access 数据库检索数据 我写的程序如下 package db import java sql public class MSaccess archive public static void main St
  • 从流中获取父对象

    我有这门课 public class StructUserType extends UserType MembersList membersList new MembersList public List
  • Java 中的 Swagger 规范验证

    我正在尝试验证一些可能包含 swagger 规范的字符串 我正在尝试使用 swagger 解析器 下面的代码不起作用 我只收到消息 属性不是类型object swagger 规范是从 xml 文件中读取的 swaggerXml nodeLi
  • Webpack - 加载块 0 失败

    我的一些用户收到此错误 未处理的拒绝消息 加载块 0 失败 堆栈 正在加载 块 0 在 HTMLScriptElement n 处失败 问题是 我没有成功复制它 我已经有一段时间出现这个错误了 对于相同的用户来说 every他们进入网站的时
  • 如何在 Laravel 5 迁移中向表(而不是列)添加注释?

    如何在 Laravel 5 迁移中向表 或列 添加注释 我目前知道如何向列添加评论 例如 table gt tinyInteger status gt comment 0 requested 1 rejected 1 confirmed 但
  • 我打开的文档(选项卡)在 VS2010 SP1 中不断消失

    在 VS 2010 中 当我关闭解决方案并在第二天重新打开它后 我打开的所有文档仍然会打开 正是我想要的 安装 SP1 后 每次打开解决方案时 所有文档都会关闭 无论我将它们保留在什么状态 这是预期的行为 错误还是存在我不知道的设置 我怎样
  • Google App Script - 合并多个文档,删除所有换行符并通过电子邮件以 pdf 形式发送

    我正在使用 Google App Script 并已成功将一个文件夹中的多个文档合并到一个文档中 并删除所有换行符 同时保持所有样式不变 我需要一些帮助的是 在removeMultipleLineBreaks element 函数完成后如何