尝试使用Google表单响应中的数据在用户提交表单时创建Google表格
问题描述:
目标:在Google脚本编辑器中编写一个程序,该程序接受汽车维修店员工填写的Google表单中的回复,做一点数学计算,然后将这些值添加到外观漂亮的模板中,然后保存并将新创建的修复估算发送到任何地方。尝试使用Google表单响应中的数据在用户提交表单时创建Google表格
我有三个文件:
- 谷歌形成了员工
- 谷歌与板材的响应链接的所有问题(W /代码和触发附后)
- 谷歌页空白模板保存在谷歌驱动
每当有人提交表单,我希望它:
- 模板的制作复制,重命名它,将它保存为“服务价值估计。”
- 获取客户信息,将其添加到表
- 获取修理信息,做一些数学,将其添加到表
- 保存/电子邮件/打印新建估计到哪里
我想我已经得到了部分#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});
}
答
当你得到工作表中的range,值应该是引号内:
basic_template_sheet_copy.getRange("A5");
当您在电子表格中获得一个范围时,您可以获取它的值或者可以设置它的值。在这种情况下,您希望将setValue用于新创建的电子表格中的范围。
例如从用户名,而不是具有价值:
getValue(username).copyTo(advisor_name_cell);
您应将其更改为:
advisor_name_cell.setValue(username);
我认为功能saveAndClose()只存在于文档而不是电子表格。
此外,DocsList服务现已被弃用,如here所示。
不使用DocsList,您可以使用Driveapp获取驱动器中文件的信息。 在此example中,您可以看到如何从Drive中的文件中获取信息,并使用该信息将电子邮件中的文件附加为pdf。
您只需将示例中的id替换为已存储在变量'basic_template_ss_copy_id'中的新文件的id。
var file = DriveApp.getFileById(basic_template_ss_copy_id);
我希望这可以帮助你。