首页 > 解决方案 > 刷新或关闭电子表格时,菜单项消失

问题描述

我正在尝试创建一个脚本,该脚本将在 Google 表格中创建一个菜单项,以便在按下时发送电子邮件。当我在脚本编辑器上按运行时,菜单项将出现,但是当 Google Sheet 刷新或关闭时,菜单项消失。

我的代码原本可以工作,但由于某种原因不再工作。

function onOpen() {
  var ss = SpreadsheetApp.openById("1j2Q58oxxcTS-QYmdvaEiNWgyRagqF17rv8o3tYWB1TQ");
  var menu = [{name: "Submit", functionName:"myFunction"}];
   ss.addMenu("Submit Booking", menu)

}

function myFunction() {

  var source = SpreadsheetApp.openById("1j2Q58oxxcTS-QYmdvaEiNWgyRagqF17rv8o3tYWB1TQ");
  var email = "removed for privacy reasons";
   var subject = "New Buffel Park Travel Bookings";
  var link = "https://docs.google.com/spreadsheets/d/1j2Q58oxxcTS-QYmdvaEiNWgyRagqF17rv8o3tYWB1TQ/edit#gid=1832370497";
  var message = "New bookings have been submitted for Buffel Park site staff.";
  var html_message = "<p>New bookings have been submitted for Buffel park site staff."+
                     "<p>"+
                     "<p>Booking details can be found <a href=\""+link+"\">here.</a>"+
                     "<p>"+
                     "<p>A PDF copy of the sheet at time of submission is also attached to this email.";

  var pdf = DriveApp.getFileById(source.getId()).getAs('application/pdf').getBytes();
  var attach = {fileName:'Buffel Park Travel Booking.pdf',content:pdf, mimeType:'application/pdf'};

  MailApp.sendEmail (email, subject, message, {htmlBody: html_message,attachments:[attach]});

   var cc = Session.getActiveUser().getEmail();
  var sub = "New bookings have been submitted for Buffel Park site staff.";

  var html = "<p>New bookings have been submitted for Buffel park site staff."+
                     "<p>"+
                    "<p>A PDF copy of the sheet at time of submission is also attached to this email.";
    MailApp.sendEmail (cc, sub, message, {htmlBody: html,attachments:[attach]});
}

我只需要按钮保持原位,以便发送请求的电子邮件提示

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


它消失是正常的行为,但是当您打开电子表格时,一旦脚本有一点时间运行,它应该会很快重新出现。

您的问题看起来是因为您正在按 ID 打开电子表格,我自己对此进行了测试,并且通过 ID 打开似乎不起作用,而使用 getActiveSpreadsheet() 可以:

function onOpen(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menu = [{name: "Submit", functionName:"myFunction"}];
  ss.addMenu("Submit Booking", menu);    
}

推荐阅读