用于通过电子邮件发送活动电子表格的 Google Apps 脚本

2024-01-26

我在网上找到了一个脚本,它可以获取当前工作表,将其复制到临时的新电子表格中,将其转换为 PDF 并通过电子邮件发送。我能够让它工作,但尝试将其设置为仅发送特定范围。尝试了一下,但无论如何我都不是一个好的编码员。或者,我也有兴趣弄清楚如何让它适合横向的 1 页 PDF,在没有网格线的情况下进行转换(我的在线研究表明这是不可能的?),甚至以 XLS 形式发送。

// Simple function to send Weekly Status Sheets to contacts listed on the "Contacts" sheet in the MPD.

// Load a menu item called "Project Admin" with a submenu item called "Send Status"
// Running this, sends the currently open sheet, as a PDF attachment
function onOpen() {
  var submenu = [{name:"Send Status", functionName:"exportSomeSheets"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu('Project Admin', submenu);  
}

function exportSomeSheets() {
  // Set the Active Spreadsheet so we don't forget
  var originalSpreadsheet = SpreadsheetApp.getActive();

  // Set the message to attach to the email.
  var message = "Please see attached"; // Could make it a pop-up perhaps, but out of wine today

  // Get Project Name from Cell A1
  var projectname = originalSpreadsheet.getRange("A1:A1").getValues(); 
  // Get Reporting Period from Cell B3
  var period = originalSpreadsheet.getRange("B3:B3").getValues(); 
  // Construct the Subject Line
  var subject = projectname + " - Weekly Status Sheet - " + period;


  // Get contact details from "Contacts" sheet and construct To: Header
  // Would be nice to include "Name" as well, to make contacts look prettier, one day.
  var contacts = originalSpreadsheet.getSheetByName("Contacts");
  var numRows = contacts.getLastRow();
  var emailTo = contacts.getRange(2, 2, numRows, 1).getValues();

  // Google scripts can't export just one Sheet from a Spreadsheet
  // So we have this disgusting hack

  // Create a new Spreadsheet and copy the current sheet into it.
  var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var projectname = SpreadsheetApp.getActiveSpreadsheet();
  sheet = originalSpreadsheet.getActiveSheet();
  sheet.copyTo(newSpreadsheet);

  // Find and delete the default "Sheet 1", after the copy to avoid triggering an apocalypse
  newSpreadsheet.getSheetByName('Sheet1').activate();
  newSpreadsheet.deleteActiveSheet();

  // Make zee PDF, currently called "Weekly status.pdf"
  // When I'm smart, filename will include a date and project name
  var pdf = DocsList.getFileById(newSpreadsheet.getId()).getAs('application/pdf').getBytes();
  var attach = {fileName:'Weekly Status.pdf',content:pdf, mimeType:'application/pdf'};

  // Send the freshly constructed email 
  MailApp.sendEmail(emailTo, subject, message, {attachments:[attach]});

  // Delete the wasted sheet we created, so our Drive stays tidy.
  DocsList.getFileById(newSpreadsheet.getId()).setTrashed(true);  
}

要发送单张纸,您可以在发送之前隐藏所有其他纸。

var sheet_to_send = 'Sheet1';
//-----------------------------
var as = SpreadsheetApp.getActiveSpreadsheet();
var sheets = as.getSheets();
for(var i in sheets){
    if (sheets[i].getName()!=sheet_to_send){
        sheets[i].hideSheet();
    }
}
MailApp.sendEmail(email_to, email_subject, email_body, {attachments: SpreadsheetApp.getActiveSpreadsheet()});
for(var i in sheets){
    if (sheets[i].getName()!=sheet_to_send){
        sheets[i].showSheet();
    }
}

如果您有更多工作表要发送,您可以使用 javascript 对象过滤它们:

var sheets_to_send = {'Sheet1':1, 'Sheet3': 1};
...
// replace 
if (sheets[i].getName()!=sheet_to_send)
// by
if (!(sheets[i].getName() in sheet_to_send))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于通过电子邮件发送活动电子表格的 Google Apps 脚本 的相关文章

  • Gmail 中删除了 iOS 深层链接

    我正在尝试发送一封带有深层链接的电子邮件到我的 iOS 应用程序 使用 myapp 格式从电子邮件中将其打开 它可以在任何 iOS 邮件客户端 邮件 邮箱等 中运行 即点击它打开应用程序 但不能在 Gmail 应用程序 甚至网络 中运行 因
  • 捕获并邮寄 bash 脚本错误

    我有一个脚本 每晚在 cron 中运行 为网络上的多个主机备份一些 postgres 数据库 我有一种方法可以通过利用退出状态来收到脚本失败的警报 但它没有告诉我失败的原因 根据以下代码 我如何捕获脚本运行时发生的任何错误 并将其通过电子邮
  • 使用 javascript 通过 google api 发送邮件失败

    我正在尝试使用 JavaScript 通过 Google API 发送电子邮件 我的问题是 当我尝试发送不带附件的简单邮件时 出现以下错误 原始 RFC822 有效负载消息字符串或通过 upload 需要 URL 上传消息 My code
  • 如果输入重复,则覆盖 Google 表格(用于表单响应)行

    因此 我一直在尝试找出如何阻止谷歌表单中的谷歌表格响应输出中出现重复的行 如果找到这个链接 听起来它正是我想要的 表单 Google 脚本防止重复 https stackoverflow com questions 16965687 for
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • Google Apps 脚本触发器 - 每当将新文件添加到文件夹时运行

    我想在任何时候执行谷歌应用程序脚本new文件被添加到特定文件夹 目前 我使用的是每 x 分钟运行一次的时钟触发器 但我只需要在向文件夹添加文件时运行脚本 有没有办法做到这一点 与this https stackoverflow com qu
  • 有没有办法将 Google 文档分割成多个 PDF?

    我想在 Google Scripts VBA 代码中复制我为 Word 文档编写的代码 基本上 它通过搜索我插入文档中的标签 将文档 切片 为多个 PDF 文件 目的是允许合唱团使用 forScore 管理乐谱的应用程序 在切片点插入先前注
  • iOS 上邮件到达时收到通知吗?

    当邮件到达标准邮件应用程序时 有没有办法让应用程序收到通知 更准确地说 我想编写一个应用程序 它能够从标准邮件应用程序读取传入的电子邮件 其中包含自定义 txt 格式的新联系人或事件 然后 应用程序应将此新联系人 事件添加到 ipad 反之
  • 在 Google 表格中批量查找并替换正则表达式

    是否有函数 脚本或插件可以将大量正则表达式替换应用于 Google 表格中的一系列数据 我有一张包含地址列表的工作表 另一张工作表在两列中包含几十对正则表达式 例如 St 和 Street 我想替换地址中第一列短语的所有实例列出另一个中相应
  • 发送python电子邮件时添加excel文件附件

    使用 python 发送电子邮件时如何添加文档附件 我收到要发送的电子邮件 请忽略 我正在循环发送电子邮件以每 5 秒发送一次 仅用于测试目的 我希望它每 30 分钟发送一次 只需将 5 更改为 1800 到目前为止 这是我的代码 如何附加
  • 将 (-inf...+inf) 范围内的任何值标准化为 (0...1)。是否可以?

    如果我们有具体的 max min 值范围 那么很容易将其标准化为 0 1 浮点值 但如果我们没有具体的限制呢 是否可以构建输出介于 0 和 1 之间的通用函数 在我看来 我认为这是不可能的 但我不是数学专家 我正在寻找 JavaScript
  • 有没有一种好方法来计算 ruby​​ 中范围元素的总和

    计算范围总和的好方法是什么 Input 4 10 Output 4 5 6 7 8 9 10 49 您可以使用EnumerableRange 对象上的方法 在本例中使用Enumerable inject 4 10 inject gt 49
  • 根据日期自动对数据进行排序

    我正在尝试使我的电子表格根据日期自动对数据进行排序 我附上了我正在使用的电子表格的照片 您会注意到 G 列中有一个工作日公式 目前 一旦我更新了配药日期 重新订购日期就会根据公式进行更新 基于安排的工作日 然后我对 G 列使用 SORT R
  • 使用 ImapMailbox.php 按日期对 Imap 邮箱进行排序

    我有一个客户支持系统 它会在收到电子邮件时创建电子邮件 我曾经使用后缀和特殊配置来获取电子邮件以添加额外的功能 例如 我想包含从电子邮件发送的附件 系统不会执行此操作 而是创建一封带有主题的电子邮件 因此我可以通过匹配主题来包含附件 我使用
  • 字符串模板电子邮件中的日期格式

    我正在使用字符串模板创建电子邮件 但当我打印出日期时 它会打印出完整日期 例如 2010 年 4 月 28 日星期三 10 51 37 BST 我想以 dd mm yyyy 格式打印出来 但不知道如何在 st 文件中格式化它 我无法单独修改
  • 在 Google Sheet 中打印每个 ID 的多个数据

    In this 电子表格 https docs google com spreadsheets d 1vHHLrLdQBRgTliO ZFmTUSTdkkWla8Lf982lG0MwJ0M edit usp sharing 我有一张名为表格
  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • 如何使用 Microsoft Graph 从任意一封电子邮件发送电子邮件

    我正在使用 microsoft graph 发送电子邮件 我想从 Active Directory 中存在的任何电子邮件发送此电子邮件 我已经获得了 Mail Send 的权限 并获得了 Azure 的管理员同意 因此 所有设置都在 Azu
  • 选择列的最后一个值

    我有一个电子表格 G 列中有一些值 有些单元格之间是空的 我需要将该列中的最后一个值获取到另一个单元格中 就像是 LAST G2 G9999 除了那个LAST不是一个函数 类似的答案卡里加里的回答 https stackoverflow c
  • 如何在时事通讯中发送图像?

    谁能告诉我如何将图像作为时事通讯的主体部分发送 我如何从后端添加任何图像 以便当我向订阅者发送新闻通讯时 我想要显示的图像作为邮件的主体部分 实际上我想说的是 我有一个可以输入文本的表单 并且该文本在时事通讯中效果很好 现在我也想在表单中添

随机推荐

  • Python 如何实现其类型对象,即类型类型始终是类型?

    我知道Python中的所有东西都是一个对象 并且这些对象的 类型 或类 是 类型 另外 类型的类型也是类型本身 正如解释得很好here http www cafepy com article python types and objects
  • Whatsapp://send?text 将字符串从“&”字符剪切到末尾? [复制]

    这个问题在这里已经有答案了 我正在尝试添加可在 WhatsApp 中共享的链接 例如 whatsapp send text http www example com products women dresses sessionid 3456
  • 为什么调用 DataTable().draw() 时 columns.render 不执行?

    我很困惑为什么列 渲染 https datatables net reference option columns render不包含在执行管道中数据表 draw https datatables net reference api dra
  • 如何在 GWT 中深度复制任意对象?

    我有一个标记为可序列化的任意对象 它有各种可变的子对象 表示货币金额 集合等 我希望能够克隆这个对象 这样如果用户修改它然后恢复他们的操作 我可以用新的克隆替换该克隆 这意味着我需要深层复制 因为我不希望用户对原始对象上出现的子对象进行更改
  • UNIQUE 约束失败:auth_user.username

    我试图将名字和姓氏直接从 Facebook API 存储到用户身份验证模型 使用 FacebookProfile 模型扩展 包含 webpull id 和year formed 模型 py class FacebookProfile mod
  • 使用 PHP 或 Javascript 检查 iOS 版本是否为 3.0 或更高版本

    我需要检查访问我网站的 iOS 设备是否安装了 iOS 3 0 或更高版本 我可以这样做吗 如果您想检查哪些浏览器 移动设备正在访问您的网站 那么答案是您可以使用读取 userAgent 字符串并搜索操作系统和号码 例如 Mozilla 5
  • django 中带有 django 表单的预选复选框

    我试图在中显示预先选定的复选框Django option forms BooleanField required False initial True but the checkbox显示已检查 我正在使用django 1 3 beta 我
  • 我已经注册了应用程序 ID,但仍然显示您没有适用于 iOS 应用程序的合格捆绑包 ID。在这里注册一个

    我已经注册了App ID 使用通配符和不使用通配符都有 这不是我第一次创建应用程序 ID 并将其提交到应用程序商店 但是在developer apple com上注册appID后 当我尝试在 itunesconnect apple com
  • 在Python中写入打开的文件时的分割函数[重复]

    这个问题在这里已经有答案了 所以我有一个程序 我应该在其中获取一个外部文件 用 python 打开它 然后分隔每个单词和每个标点符号 包括逗号 撇号和句号 然后我应该将该文件保存为文本中每个单词和标点符号出现时的整数位置 例如 我喜欢编码
  • 为什么 Window.Close 事件会传播?

    我遇到了一个奇怪的情况Close子窗口的事件传播到父窗口并导致其关闭 我做了一个最小的例子 如下所示 For TestWindow除了VS生成的默认WPF窗口之外什么都没有 and in App xaml cs我覆盖OnStartup事件并
  • 打包(类型擦除)随机数生成器

    C 11 std 库有几个随机数生成器 RNG 每个都实现了这个概念统一随机数生成器 http en cppreference com w cpp concept UniformRandomNumberGenerator 然后可以将它们用作
  • 简单的 Linux 信号处理

    I have a program that creates many threads and runs until either power is shutdown to the embedded computer or the user
  • FileNotFoundException 与 NoSuchFileException

    我注意到另一个 Java 异常表明该文件不存在 NoSuchFileException 我的任务是重构某个 api 该 api 从不同的方法中抛出这两种情况 而我只想使用其中一种 我应该映射吗NoSuchFileException提交至Fi
  • PHP Carbon“month()”方法生成错误的日期时间

    我刚刚偶然发现了一些非常奇怪的事情 我使用 Carbon 包来生成 DateTime 对象 我使用以下代码创建 2016 年 9 月开始的日期时间字符串 Carbon create gt month 9 如果我使用 Laravel 的 dd
  • 使用 Java 6 注释处理器获取泛型类型的限定类名

    我正在使用 JDK 6 的注释处理 API 开发一个小型代码生成器 并且一直试图获取类中字段的实际泛型类型 为了更清楚起见 假设我有一个这样的课程 MyAnnotation public class User private String
  • 如何使用加密模块使用公私钥对进行加密和解密?

    我必须使用加密模块在 Node js 中编写代码 因为除了 MIT 许可之外 我不允许使用任何模块 我需要生成一个密钥对并使用公钥加密一些消息并使用私钥解密 第一部分 即密钥对的生成已完成 我没有得到任何线索如何使用加密模式使用相同的密钥对
  • ‘1004’: “排序参考无效。”

    我正在尝试对单独的工作表中的范围进行排序 然而 我不断收到这样的消息 1004 The sort reference is not valid Make sure it s within the data you want to sort
  • Apple 推送通知中的表情符号支持

    我正在开发名为 INTERSTIZIO 的 iPhone 应用程序 在这个应用程序中 我实现了用户之间聊天等功能 在此用户可以发送文本 位置和带有表情符号的文本 如果应用程序在接收端未处于打开模式 则从后端发送生成推送并显示给接收者 我可以
  • if 和 for 循环包含在 while 循环 VBA 中

    我正在尝试编写一些代码 循环在一个列中抛出一列数据 并将其与同一工作表中另一列中的数据进行匹配 当两个数据点匹配时 相应的数据将被复制到第一个数据点旁边 最简单的表达方式是我在 while 循环内的 for Staten 内有一个 if 语
  • 用于通过电子邮件发送活动电子表格的 Google Apps 脚本

    我在网上找到了一个脚本 它可以获取当前工作表 将其复制到临时的新电子表格中 将其转换为 PDF 并通过电子邮件发送 我能够让它工作 但尝试将其设置为仅发送特定范围 尝试了一下 但无论如何我都不是一个好的编码员 或者 我也有兴趣弄清楚如何让它