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

时间:2016-05-18 21:44:55

标签: 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错误报告上刷新脚本时,它会创建一个包含月份名称的新标签,但不会触发“通知”。功能。我只有一个触发器:notify / from spreadsheet / On change。

我觉得我一定错过了表单上的内容,但无法看到它是什么。

1 个答案:

答案 0 :(得分:1)

触发器由用户操作触发。脚本活动不会触发它们。您可以使用以下测试脚本查看此内容,其中“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);
}