Google apps script 谷歌表单电子表格更新脚本
我的表单中有一些代码,可以通过电子邮件将支出报告发送给经理以供批准,还可以接收一个URL,其中包含将响应发送回表单上填写信息的人所需的信息 我现在需要做的就是用正确的批准消息(接受或拒绝)更新表单中的字段 我认为这必须在doGet方法中发生,但是我是否必须传递更多的行号和批准消息才能完成这项工作?(例如,获取电子表格、表格等) 以下是我迄今为止收到的电子邮件和生成的URL似乎都是正确的: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];
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];)它工作得完美无缺。在初始设置中,我肯定错过了一些全局设置。太好了!我很高兴您对一些现有代码进行了反向工程,并使其为您工作。