google-apps-script - 将新工作表添加到 Google 工作簿时发送电子邮件

标签 google-apps-script google-sheets eventtrigger

我有一个脚本可以从我们的 CMS 中提取错误报告数据,创建每月存档表并将其作为新标签附加到另一个 Google 表中。新工作簿的工作表名称为“Sheet1”,创建的新选项卡为三月、四月、五月等。当每个月的第一天添加新工作表时,我需要通知我们的团队(我知道每个人都知道这是在本月的第一天,但​​要让他们记住查看新表格非常困难!)。

我遇到了这个脚本:How do I set up notifications for when a new sheet is added in Google Sheets?

我已将工作表名称行更改为; var sheet = ss.getSheetByName('Sheet1');和电子邮件地址。该脚本在我手动运行时有效。单元格 A1 每次增加一个,我收到一封电子邮件。但是,当我刷新 CMS 错误报告上的脚本时,它会创建带有月份名称的新选项卡,但不会触发“通知”功能。我只有一个触发器:通知/来自电子表格/更改。

我觉得我一定是在工作表命名中遗漏了一些东西,但看不到它是什么。

最佳答案

触发器由用户操作触发。脚本事件不会触发它们。您可以通过以下测试脚本看到这一点,其中“doSomething”插入一个工作表,displayEvent 在浏览器消息中显示事件。为 displayEvent 设置 onChange 触发器:手动插入工作表会触发它,但运行“doSomething”不会。

function doSomething() { SpreadsheetApp.getActiveSpreadsheet().insertSheet(); }
function displayEvent(e) { Browser.msgBox(JSON.stringify(e)); }

作为解决方法,将脚本设置为每隔一段时间运行一次,而不是通过触发器(例如 15 分钟)运行。顺便说一句,不是使用单元格 A1 来存储工作表的数量,而是可以将此数字存储在脚本属性中。方法如下:

function notify() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();  
  var scriptProperties = PropertiesService.getScriptProperties();
  var numSheets = scriptProperties.getProperty('Sheets');
  if (numSheets > 0 && ss.getSheets().length > numSheets) {
    MailApp.sendMail('someone', 'subject', 'new sheet')  
  }
  scriptProperties.setProperty('Sheets', ss.getSheets().length);
}

关于google-apps-script - 将新工作表添加到 Google 工作簿时发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310600/

相关文章:

javascript - 以编程方式在谷歌散点图中显示颜色点

javascript - 如何让for循环脚本更加高效?

javascript - 如何在谷歌应用程序脚本中调试客户端 javascript(在 html 页面中)

google-sheets - 用于获取连续最后一个值的 Google 电子表格公式

google-apps-script - 如何制作应用程序脚本以立即允许访问 Google 电子表格中的所有导入元素?

VBA - 双击插入的图像时如何运行函数

javascript - 在 GAS 中使用全局变量是否可取?有什么缺点吗?

api - Google Sheets API v4 和 valueInputOption

google-tag-manager - GTM Click 元素不会在点击时触发

javascript - 如何使用 javascript 触发按键事件?