通过脚本发送谷歌表格

时间:2015-03-21 19:47:29

标签: forms google-apps-script gmail google-sheets

我的家庭手机话费设置为自动转帐,有时会忘记向每个人发送他们的部分账单。我想设置一个带有谷歌应用程序的自动系统,向我发送一个表格,我可以输入每个人的欠款。然后,在我提交表单后,该应用程序将向我的计划中的人员发送一封电子邮件,其中包含应付金额。然后,我希望在一两周之后将相同的预填表格发回给我,这样我就可以使用人员的付款状态更新我的googlesheet列。

我已经弄清楚如何处理表单数据然后发送帐单电子邮件。但是,我找不到通过google-scirpt重新发送表单的方法,所以我可以更新,如果一个人付了我,我已兑现他们的支票。我想我需要捕获responce.id来更新相同的表单,但是我找不到重新发送表单的方法。
我google了一下,尝试了一些方法,如sendForm("电子邮件",formID),但无法找到任何东西。我在网上看到的所有内容都告诉我如何从我的谷歌硬盘中发送表单。但是,我想知道是否有人知道这种方法是否存在。

以下是我的代码示例(我绝不是专业程序员,因此可以随意提出改进现有代码的建议):

/*Define key variables up here like URL for sheets */
var sheetId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var sheetName = "Form Responses";
var sheetData =SpreadsheetApp.openById(sheetId).getSheetByName(sheetName).getDataRange();
var lastRow = sheetData.getNumRows();
var monthNames = ["January", "February", "March", "April", "May",    "June",
 "July", "August", "September", "October", "November", "December"];

var base =  [ 1, 2];
function test(){
   for (i = 0; i< base.length; i++){Logger.log(i);} 
};


function lastBillComplete() {
  lastRow = sheetData.getNumRows();

  isSuesCheckCashed = sheetData.getValues()[lastRow-1][7];
  isNancysCheckCashed = sheetData.getValues()[lastRow-1][8];

  if (isSuesCheckCashed == "Yes" && isNancysCheckCashed == "Yes") {
    return true;}
  else{
    return false;}


  };


 function sendBill(){
 // Array of names that emails are being sent to
   var emails = ["xxxxxxx@gmail.com","xxxxxxx@gmail.com"]; //the real emails will go here.
   var names = ["Sue", "Mom"];

 //subject line of email
   var subject = "Verizon bill for " + monthNames[new Date(sheetData.getValues()[lastRow -1][2]).getMonth()];


//body of email that changes for each person 

for (i = 0; i < names.length; i++){
   var amount = sheetData.getValues()[lastRow-1][i+3];
   var body = new String("Hi  " + names[i] +",\n\nYour portion of this month's bill is $"+amount +". I have attached the .pdf of the bill to the email if you would like to look it over.  Please let me know if you have any questions.\n\nTalk to you soon, \nJeremy");
   MailApp.sendEmail(emails[i].toLowerCase(), subject, body);

    }
  };

我意识到设置此功能的最佳方法可能是让我的计划中的人员自动转帐到我的银行帐户。但是,我帐户上的人喜欢发送实际支票,并且对这个想法有抵触情绪。所以我想我会利用这个机会来提高我的脚本编写能力。

提前致谢, 杰里米

1 个答案:

答案 0 :(得分:0)

这可能与您正在进行的操作略有不同,但如果您填写的表单已连接到电子表格,我认为如果您使用该电子表格作为验证是否或如果他们已填写表格,请不要为响应添加时间戳或为结算月设置一个字段,只是标识时间段的任何内容。在该时间段内,检查您的计划成员是否有回复。然后,您可以创建一个time-based trigger来定期检查并使用相同的电子邮件发送代码来发送尚未支付该表单的人员,或者只是发送电子邮件以采取任何适当的操作。