我正在尝试写一个小脚本,让我的同事和我的生活更轻松。我试图根据输入到自定义表单中的信息将行附加到电子表格中。下面发布的代码只是doPost块,它应该附加谷歌电子表格。
function doPost(form) {
var PN = form.PartNumber;
var REV = form.Revision;
var DATE = form.RevisionDate;
var DESC = form.Description;
var NOTE = form.PartNotes;
var URL = form.myFile.getURL();
var ss = SpreadsheetApp.openById("ID HERE"); // removed ID for sake of safety (let me be paranoid)
var sheet = ss.getSheetName('Uploads');
sheet.appendRow([PN,REV,DATE,DESC,NOTE,URL]);
}
我不确定为什么它没有写入电子表格但它没有给我任何错误。如果你能提供任何有关错误的见解,我将非常感激;网上有很多指南,但大多数似乎是基于弃用的函数/代码/等。
感谢您的时间。
答案 0 :(得分:1)
而不是使用doPost,设置一个" On表单提交"触发。
您需要让namedValues能够提取特定值并获取第一个输出。
此外,它应该是" getSheetByName('上传')"
正如前面的回答所指出的那样,目前还不清楚你想要通过" form.myFile.getURL();"如果你想获取表单url,你也可以将其创建为字符串,因为它始终保持不变。
以下是您的代码的工作示例:
function doPost(form) {
var formResponses = form.namedValues;
var PN = formResponses.PartNumber[0];
var REV = formResponses.Revision[0];
var DATE = formResponses.RevisionDate[0];
var DESC = formResponses.Description[0];
var NOTE = formResponses.PartNotes[0];
//var URL = form.myFile.getURL(); //Not sure what you are tyring to get here as form URL will always be the same.
var URL = "Your form's url"; //You can put the form url in here so it will be pushed in to every row.
var ss = SpreadsheetApp.openById("ID HERE"); // removed ID for sake of safety (let me be paranoid)
var sheet = ss.getSheetByName('Uploads');
sheet.appendRow([PN,REV,DATE,DESC,NOTE,URL]);
}
答案 1 :(得分:0)
表单字段嵌套在doPost
参数中的“parameter”属性中。
因此,您应该使用以下方式访问它们:
function doPost(form) {
var actualForm = form.parameter;
var PN = actualForm.PartNumber;
//etc
要仔细检查收到的所有参数及其名称,您可以将所有字符串附加到表格中,如下所示:
sheet.appendRow([JSON.stringify(form)]);
- 修改
这form.myFile.getURL()
也看起来很奇怪。我想你可以做的另一个好的调试技巧是将所有东西都包装在try-catch中,然后给自己发送任何错误。例如:
function doPost(form) {
try {
//all your code
} catch(err) {
MailApp.sendMail('yourself@etc', 'doPost error', err+'\n\n'+JSON.stringify(form));
}
}
答案 2 :(得分:0)
onFormSubmit 有效。 " doPost" 看起来不对。
简单示例:
function Initialize() {
var triggers = ScriptApp.getProjectTriggers();
for(var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
ScriptApp.newTrigger("SendGoogleForm")
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit()
.create();
}
function SendGoogleForm(e)
{
try
{
完整示例 - 向下滚动到代码http://www.labnol.org/internet/google-docs-email-form/20884/(注意:示例发送电子邮件)
触发文档: https://developers.google.com/apps-script/guides/triggers/events
注意:我认为问题是doPost,它是否适用于Google表单?从未见过它与谷歌表格一起使用。
答案 3 :(得分:0)
首先,感谢迄今为止已回复信息的所有人。这里发布的解决方案都没有适用于我的特定实现(我的实现可能是罪魁祸首,它非常粗糙),但它们肯定让我走上了我现在轻松使用的表单的工作版本。我已经发布了以下一些代码:
function sheetFill(form, link) {
try {
var formResponses = form.namedValues;
var toForm = [0,0,0,0,0,0,0];
for (i=0;i < form.PartNumber.length;i++){
toForm[0] = toForm[0]+form.PartNumber[i];
}
...(以后有几个循环)
var d = new Date();
var ss = SpreadsheetApp.openById("IDHERE");
var sheet = ss.getCurrentSheet;
ss.appendRow([toForm[0], toForm[1], toForm[2], toForm[3], toForm[4], toForm[5], toForm[6], link, d]);
} catch(err) {
MailApp.sendEmail('EMAIL', 'doPost error', err+'\n\n'+JSON.stringify(form));
}
}
它不是多功能或强大而且不优雅,但它是一个起点。