javascript - 每当有人提交表单时,尝试使用 Google 表单响应中的数据来创建 Google 表格

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

目标:在 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

最佳答案

当您获得 range 时在工作表中,值应位于引号内:

basic_template_sheet_copy.getRange("A5");

当您在电子表格中获取范围时,您可以获取它的值,也可以设置它的值。在这种情况下,您要使用 setValue到新创建的电子表格中的范围。

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

getValue(username).copyTo(advisor_name_cell);

您应该将其更改为:

advisor_name_cell.setValue(username);

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

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

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

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

var file = DriveApp.getFileById(basic_template_ss_copy_id);

希望这对您有帮助。

关于javascript - 每当有人提交表单时,尝试使用 Google 表单响应中的数据来创建 Google 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981247/

相关文章:

javascript - 如何解决 Git 和 pdfmake-chinese 字体的问题?

javascript - Next.js 服务器端路由

javascript - Stripe.js - 无法更改信用卡输入的背景颜色或高度

google-sheets - 如何让谷歌表格公式只计算一次?

javascript - 未捕获的类型错误 : Cannot read property 'style' of null(index):110 onclick

javascript - How do I edit scopes?//Google Classroom control permission scopes in google apps scripts for student access 权限范围

javascript - 使用 Google Apps 脚本在不通知用户的情况下共享云端硬盘文档

javascript - 访问 strg 名称为数字的对象

google-apps-script - 谷歌脚本: Library doesn't work unless explicily shared

google-sheets - 编写公式时是否有更好的 UI 扩展?