Google Script不附加电子表格

时间:2015-05-08 13:14:39

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

我正在尝试写一个小脚本,让我的同事和我的生活更轻松。我试图根据输入到自定义表单中的信息将行附加到电子表格中。下面发布的代码只是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]);
}

我不确定为什么它没有写入电子表格但它没有给我任何错误。如果你能提供任何有关错误的见解,我将非常感激;网上有很多指南,但大多数似乎是基于弃用的函数/代码/等。

感谢您的时间。

4 个答案:

答案 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));
 }
}

它不是多功能或强大而且不优雅,但它是一个起点。