【问题标题】:Google form spreadsheet update script谷歌表单电子表格更新脚本
【发布时间】:2015-03-11 20:12:40
【问题描述】:

我的表单有一些代码,可以很好地通过电子邮件发送费用报告的经理以供批准,以及接收返回的 URL,其中包含将回复发送回填写表单信息的人所需的信息.

我现在需要做的就是使用适当的批准消息(接受或拒绝)更新表单中的字段

我认为这必须在 doGet 方法中发生,但我是否必须传递更多信息才能完成此操作? (例如获取电子表格、获取工作表等)

这是我目前所拥有的,两封电子邮件和生成的 URL 似乎都是正确的:

function sendEmail(e){
  /**
 var email = e.values[1];
 var item = e.values[2]; 
 var cost = e.values[3];
  */
  var serviceInformation = e.values[1];
  var language = e.values[2];
  var meetingType = e.values[3];
  var eventDate = e.values[4];
  var clientName = e.values[5];
  var detailedDirections = e.values[6];
  var onSitePOCName = e.values[7];
  var onSitePOCNumber = e.values[8];
  var department = e.values[9];
  var contactPhoneNumber = e.values[10];
  var approval = e.values[11];  //the one we need to modify
  var requestorEmail = e.values[12];
  var managerEmail = e.values[13];
  var Language2 = e.values[14];
  var interpreterName = e.values[15];
  var interpreterAgency = e.values[16];
  var dateConformationSent = e.values[17];
  var specialNotes = e.values[18];
  var row = e.range.getRow();


  var url = 'https://script.google.com/a/macros/richmond.k12.va.us/s/AKfycbwuRr1boKTH0v1mprWmc7PE66_mQ_dmPE0lyWb7vkfiyW3pn31b/exec';


//add on the parameters to URL to send to the manager
  var approve = url + '?approval=true'+'&reply='+requestorEmail+'&row='+row;
  var reject = url + '?approval=false'+'&reply='+requestorEmail+'&row='+row;

      var html = "<HTML><body>"+
               "<h2>please review</h2><br />"
  +"<P>" + language +"  " + serviceInformation
  +"<p>" + meetingType+ "  on   "+ eventDate + "    for " +clientName
  +"<p>" + "Location: "+ department
  +"<p>" + "requester: "+ requestorEmail+ "  "+
    "<p>"+

    "<a href="+ approve +">Approve</a><br />"+
      "<p>"+

    "<a href=" +reject+">Reject</a><br />"+
              "</HTML></body>";


MailApp.sendEmail(managerEmail, "Approval Request", "what no html?",   {htmlBody: html});

}


function doGet(e){
  var params = JSON.stringify(e);
  return HtmlService.createHtmlOutput(params);


//added in an edit
var id = '1UzlJ6Uw12H5dGVcLz7ONp3Neehq1DL21hqZnrMx7mxs';
  var ss = SpreadsheetApp.openById(id);
   var sheet = ss.getActiveSheet();
   var column = 12; 
   var row = e.parameter.row;
   var approval_cell = sheet.getRange(row, column);
  Logger.log(row);
  Logger.log(ss);
  Logger.log(sheet);
  Logger.log(approval_cell);
 //logger logs the proper row.  SS = Spreadsheet,  sheet = sheet,  approval_cell = Range


  var aprovalResponce = (e.parameter.approval == 'true') ? 'Approved.' :  'Sorry, you need to reschedule';

//added values after aprovalResponce, in the email, they are both undefined.
  var msg = "Your manager said : " + aprovalResponce;
  var replyEmail = e.parameter.reply;

   //MailApp.sendEmail(replyEmail, "Approval Request", msg);

   //update the approval field

  //changed in edit
   if (e.parameter.approval == 'true') {
    approval_cell.setValue("APPROVED"+;
  } else {
    approval_cell.setValue("DENIED");
  }


  //send the actual email out
  MailApp.sendEmail(replyEmail, "Approval Request", msg);
}

【问题讨论】:

    标签: google-apps-script google-sheets google-spreadsheet-api google-forms


    【解决方案1】:

    您似乎正在尝试更改电子表格中的批准值?如果是这样,我想这应该可行:

    //update the approval field
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var column = 12; 
    var row = e.parameter.row;
    var approval_cell = sheet.getRange(row, column);
    
    if (e.parameter.approval == 'true') {
        approval_cell.setValue("APPROVED");
    } else {
        approval_cell.setValue("DECLINED");
    }
    

    【讨论】:

    • 这看起来与我在其他地方看到的非常相似,所以它应该可以工作。但是,我的代码现在似乎不接受任何更改。即使在保存并重新发布后。甚至尝试了一些简单的方法,例如添加到电子邮件文本中,但它仍然使用旧消息
    • 看起来像 SpreadSheetApp.getActiveSpreadsheet();当我对代码使用 DEV 链接时返回 null。这是一个绑定脚本,所以我应该可以访问该文件,但我认为我需要通过 ID 查找它。但现在似乎文档遇到了服务问题,我现在无法打开电子表格进行测试。想知道这是否就是为什么重新发布代码似乎对文本更改没有任何作用,好像它仍在使用几天前的旧版本
    • 好的,现在 Google 文档已备份,我一切正常(更新了上面的代码),它按上述值的预期拉回了电子表格、工作表和范围(来自 logger.log) .但是,它仍然不会更新 Approval 列。没有其他错误被抛出。我确实必须通过 ID 获取电子表格,而不仅仅是活动的电子表格(因为它返回 null)但是,我认为这不会有太大的不同,因为所有其他方法调用应该是相同的
    • 好消息,今天开始工作,它只进行了一些更改,不知何故,它今天早上将文本添加到了我没有告诉它进行的新工作表上的正确单元格中,一旦我抓住了正确的工作表(var sheet = ss.getSheets()[1];),它就完美地工作了。我一定是在初始设置的某个地方错过了一些全局设置。
    • 太棒了!我很高兴您对一些现有代码进行逆向工程并使其适合您。
    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多