Google apps script 谷歌表单电子表格更新脚本

Google apps script 谷歌表单电子表格更新脚本,google-apps-script,google-sheets,google-spreadsheet-api,google-forms,Google Apps Script,Google Sheets,Google Spreadsheet Api,Google Forms,我的表单中有一些代码,可以通过电子邮件将支出报告发送给经理以供批准,还可以接收一个URL,其中包含将响应发送回表单上填写信息的人所需的信息 我现在需要做的就是用正确的批准消息(接受或拒绝)更新表单中的字段 我认为这必须在doGet方法中发生,但是我是否必须传递更多的行号和批准消息才能完成这项工作?(例如,获取电子表格、表格等) 以下是我迄今为止收到的电子邮件和生成的URL似乎都是正确的: function sendEmail(e){ /** var email = e.values[1];

我的表单中有一些代码,可以通过电子邮件将支出报告发送给经理以供批准,还可以接收一个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);
}
功能发送电子邮件(e){
/**
var email=e.values[1];
var项目=e.价值[2];
var成本=e.价值[3];
*/
var serviceInformation=e.values[1];
var语言=e.值[2];
var meetingType=e.值[3];
var eventDate=e.values[4];
var clientName=e.values[5];
var detailedDirections=e.values[6];
var onSitePOCName=e.values[7];
var onSitePOCNumber=e.值[8];
var部门=e.价值[9];
var contactPhoneNumber=e.值[10];
var approval=e.values[11];//我们需要修改的那个
var requestorEmail=e.values[12];
var managerEmail=e.values[13];
var Language2=e.值[14];
var=e.values[15];
var=e.值[16];
var=e.values[17];
var specialNotes=e.值[18];
var row=e.range.getRow();
var url='1〕https://script.google.com/a/macros/richmond.k12.va.us/s/AKfycbwuRr1boKTH0v1mprWmc7PE66_mQ_dmPE0lyWb7vkfiyW3pn31b/exec';
//将参数添加到URL以发送给管理器
var approve=url+'?approval=true'+'&reply='+requestorEmail+'&row='+row;
var reject=url+'?批准=false'+'&reply='+requestorEmail+'&row='+row;
var html=“”+
“请查看
” +“

”+语言+”+服务信息 +“”+meetingType+”在“+eventDate+”上表示“+clientName” +“”+”位置:“+部门 +“”+”请求者:“+requestorEmail+”+ “”+ “
”+ “”+ “
”+ ""; sendmail(managerEmail,“批准请求”,“什么没有html?”,{htmlBody:html}); } 函数doGet(e){ var params=JSON.stringify(e); 返回HtmlService.createHtmlOutput(参数); //在编辑中添加 变量id='1UzlJ6Uw12H5dGVcLz7ONp3Neehq1DL21hqZnrMx7mxs'; var ss=电子表格应用程序openById(id); var sheet=ss.getActiveSheet(); var列=12; var行=e.parameter.row; var批准\单元=sheet.getRange(行、列); Logger.log(行); Logger.log(ss); 日志记录(表); Logger.log(批准单元); //记录器记录正确的行。SS=电子表格,sheet=工作表,approval\u cell=范围 var aprovalResponce=(e.parameter.approval=='true')?'Approved':'抱歉,您需要重新安排'; //在aprovalResponce之后添加的值在电子邮件中,它们都是未定义的。 var msg=“你的经理说:”+aprovalResponce; var replyEmail=e.parameter.reply; //MailApp.sendmail(回复邮件,“批准请求”,msg); //更新“批准”字段 //在编辑中更改 如果(e.parameter.approval==“true”){ 批准\单元设置值(“批准”+; }否则{ 批准单元设置值(“拒绝”); } //发送实际的电子邮件 MailApp.sendmail(回复邮件,“批准请求”,msg); }


看起来您正试图更改电子表格中的批准值?如果是这样,我想这应该可以:

//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()一样;在我使用代码的开发链接时返回null。这是一个绑定脚本,因此我应该可以访问该文件,但我认为我需要通过ID进行查找。但现在似乎文档存在服务问题,我无法立即打开电子表格进行测试。不知道这是否是重新发布代码似乎对文本ch无效的原因anges,就好像它仍然在使用前几天的旧版本一样,现在Google docs已经备份了,我让一切都正常工作了(上面更新的代码),它根据上面的值(从logger.log)调回了电子表格、表格和范围。但是,它仍然不会更新“批准”列。不会引发其他错误。我确实必须按ID获取电子表格,而不仅仅是活动的电子表格(因为它返回null)但是,我不认为这有多大区别,因为所有其他方法调用都应该是samegreat news,今天开始工作,它只做了一些更改,不知怎的,它将文本添加到了今天早上新工作表的正确单元格中,我没有告诉它,一旦我抓到了正确的工作表(var sheet=ss.getSheets()[1];)它工作得完美无缺。在初始设置中,我肯定错过了一些全局设置。太好了!我很高兴您对一些现有代码进行了反向工程,并使其为您工作。