【问题标题】:Trying to use data from Google Form response to create Google Sheet whenever someone submits a form每当有人提交表单时,尝试使用来自 Google 表单响应的数据来创建 Google 表格
【发布时间】:2015-10-06 23:10:27
【问题描述】:

目标:在 Google 脚本编辑器中编写一个程序,从汽车维修店员工填写的 Google 表单中获取响应,进行一些数学运算,然后将值添加到漂亮的模板,然后保存并将新创建的修复估计发送到任何地方。

我有三个文件:

  1. 包含员工所有问题的 Google 表单
  2. 与响应链接的 Google 表格(附有代码和触发器)
  3. Google 表格空白模板保存在 Google 云端硬盘中

每次有人提交表单时,我希望它:

  1. 复制模板,重命名,保存为“Service Estimate..”
  2. 获取客户信息,将其添加到工作表中
  3. 获取维修信息,做一些数学运算,将其添加到工作表中
  4. 保存/通过电子邮件发送/打印新创建的估算到任何地方

我想我已经弄清楚了第 1 部分和第 4 部分,但我似乎无法从表单回复中获取信息以进入工作表。不知道我做错了什么。如果我的代码令人作呕,这就像我做过的第一个非常抱歉的程序一样。

现在,我只是想将客户姓名等基本信息纳入估算表。一旦我让那部分工作,我会担心得到所有的修理和诸如此类的东西。这是我在表单响应表的脚本编辑器中获得的代码:

function onFormSubmit(e) {

//Get values from submitted form

var time_stamp = e.values[1];
var username = e.values[2];
var customer_name = e.values[3];
var customer_email = e.values[4];
var veh_year = e.values[5];
var veh_make = e.values[6];
var veh_model = e.values[7];
var veh_mileage = e.values[8];


var estimate_folder = DriveApp.getFolderById('0B5lz3Xz9Jj1ifkRtT25MX0k1STFsQXlSMGk4aWdvTTFyV21RVnhIdTFrMEt2UFZ4WUY4MXM');
var basic_template_ss_id = ('1B3h440kXs1t9UiSpY5vlzoE7tdo8Z3OLernmweOo2ik');


// Get template, make a copy of it, save copy to Estimates folder

var basic_template_ss_copy_id = DocsList.getFileById(basic_template_ss_id).makeCopy('Service Estimate for ' + customer_name + ' ' + time_stamp , estimate_folder).getId();

//Get newly created blank estimate sheet

var basic_template_sheet_copy = SpeadsheetApp.openById(basic_template_ss_copy_id).getSheets()[0];


//Add basic info

var advisor_name_cell = basic_template_sheet_copy.getRange(A5);
var cust_name_cell = basic_template_sheet_copy.getRange(A7);
var year_cell = basic_template_sheet_copy.getRange(D7);
var make_cell = basic_template_sheet_copy.getRange(E7);
var model_cell = basic_template_sheet_copy.getRange(F7);



getValue(username).copyTo(advisor_name_cell);
getValue(customer_name).copyTo(cust_name_cell)
getValue(veh_year).copyTo(year_cell);
getValue(veh_make).copyTo(make_cell)
getValue(veh_model).copyTo(model_cell)

//Copy, Save, Send, Print

copyDoc.saveAndClose();
var advisor_name = getName();
var pdf = DocsList.getFileById(basic_template_ss_copy_id).getAs("application/pdf");
var subject = "Service Estimate for " + customer_name;
var body = "Here's your service estimate from Midway Ford. See attached.";
MailApp.sendEmail(customer_email, subject, body, {htmlBody: body, attachments: pdf});
MailApp.sendEmail(username, subject, body, {htmlBody: body, attachments: pdf});
}

Screenshot of Template

【问题讨论】:

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


    【解决方案1】:

    当您在工作表中获取range 时,该值应在引号内:

    basic_template_sheet_copy.getRange("A5");
    

    当您在电子表格中获得一个范围时,您可以获取它的值,也可以设置它的值。在这种情况下,您希望将setValue 用于新创建的电子表格中的范围。

    例如来自用户名的值而不是:

    getValue(username).copyTo(advisor_name_cell);
    

    你应该把它改成:

    advisor_name_cell.setValue(username);
    

    我认为函数 saveAndClose() 仅适用于文档而不适用于电子表格。

    此外,DocsList 服务现已弃用,如 here 所示。

    您可以使用 Driveapp 来获取 Drive 中文件的信息,而不是使用 DocsList。 在此example 中,您可以了解如何从云端硬盘中的文件中获取信息,并使用该信息将文件以 pdf 格式附加到电子邮件中。

    您只需将示例中的 id 替换为新文件的 id,该文件已存储在变量“basic_template_ss_copy_id”中。

    var file = DriveApp.getFileById(basic_template_ss_copy_id);
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2018-03-15
      • 2020-07-31
      相关资源
      最近更新 更多