【发布时间】:2021-11-05 13:32:48
【问题描述】:
我目前正在创建一个脚本,该脚本从由 forms 填充的 google sheet 获取信息,然后将其插入到 doc 我创建的模板。当我第一次创建脚本并使用示例问题对其进行测试时,一切都按我的意愿进行,因此我开始构建数据最终将进入的表单和文档模板。作为参考,我使用了这个教程:https://youtu.be/ziLtj5-_D7c
我遇到的第一个问题是我希望文档包含将由我添加到工作表中的公式创建的工作表数据。新表单提交在表格中创建了不会自动应用公式的新行。我通过在工作表中创建一个新选项卡并使用 =query 大致复制响应选项卡来解决这个问题。我在工作表的第二个选项卡中创建了新列,并将所需的公式应用于这些列。现在,当我提交一个新表单时,响应进入第一个选项卡,第二个选项卡被填充以匹配,我从那里的公式中获得了我需要的附加信息。我按照本教程做到了这一点:https://youtu.be/rSBb84QIjwg
我不知道该怎么做是编辑脚本,以便将两个选项卡中的信息插入到文档模板中。例如,以下位可以很好地从第一个选项卡中获取数据并将其插入到文档中:
function autofillGoogleDocFromForm(e) {
var timestamp = e.values[0];
var invoicenumber = e.values[1];
var datesubmitted = e.values[2];
var pdatebegin = e.values[3];
var pdateend = e.values[4];
var invoicesalary = e.values[5];
var invoicetravel = e.values[6];
var invoicesupplies = e.values[7];
var invoiceother = e.values[8];
var invoiceindirect = e.values[9];
我想做的是添加来自第二个选项卡的其他变量。第一个选项卡上的 K 列将是 [10],我如何从 second 选项卡中引用 K 列?
编辑:在提出这个问题之前,这是完成我需要从 first 表执行的所有操作的完整脚本:
function autofillGoogleDocFromForm(e) {
var timestamp = e.values[0];
var invoicenumber = e.values[1];
var datesubmitted = e.values[2];
var pdatebegin = e.values[3];
var pdateend = e.values[4];
var invoicesalary = e.values[5];
var invoicetravel = e.values[6];
var invoicesupplies = e.values[7];
var invoiceother = e.values[8];
var invoiceindirect = e.values[9];
var templateFile = DriveApp.getFileById("1CRMLGw-dq8vsQASkFDuOVvg03DgqYInKeTscGu9jXn4");
var templateResponseFolder = DriveApp.getFolderById("1lCLWLKochBNW1uvG9hJkjZtu7EWNXhx6");
var copy = templateFile.makeCopy('012 Invoice Number: ' + invoicenumber, templateResponseFolder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();
body.replaceText("{{Invoice number}}", invoicenumber);
body.replaceText("{{Date submitted}}", datesubmitted);
body.replaceText("{{Beginning date}}", pdatebegin);
body.replaceText("{{Ending date}}", pdateend);
body.replaceText("{{Invoice salary}}", invoicesalary);
body.replaceText("{{Invoice travel}}", invoicetravel);
body.replaceText("{{Invoice supplies}}", invoicesupplies);
body.replaceText("{{Invoice other}}", invoiceother);
body.replaceText("{{Invoice indirect}}", invoiceindirect);
doc.saveAndClose();
}
这是我在这里阅读 cmets 后的修改尝试:
function autofillGoogleDocFromForm(e) {
var secondTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Totals");
var timestamp = e.values[0];
var invoicenumber = e.values[1];
var datesubmitted = e.values[2];
var pdatebegin = e.values[3];
var pdateend = e.values[4];
var invoicesalary = e.values[5];
var invoicetravel = e.values[6];
var invoicesupplies = e.values[7];
var invoiceother = e.values[8];
var invoiceindirect = e.values[9];
var invoiceamount = secondTab.getRange("K:K").getValues();
var salarytotal = secondTab.getRange("L:L").getValues();
var traveltotal = secondTab.getRange("M:M").getValues();
var suppliestotal = secondTab.getRange("N:N").getValues();
var othertotal = secondTab.getRange("O:O").getValues();
var indirecttotal = secondTab.getRange("P:P").getValues();
var totaltodate = secondTab.getRange("Q:Q").getValues();
var templateFile = DriveApp.getFileById("1CRMLGw-dq8vsQASkFDuOVvg03DgqYInKeTscGu9jXn4");
var templateResponseFolder = DriveApp.getFolderById("1lCLWLKochBNW1uvG9hJkjZtu7EWNXhx6");
var copy = templateFile.makeCopy('012 Invoice Number: ' + invoicenumber, templateResponseFolder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();
body.replaceText("{{Invoice number}}", invoicenumber);
body.replaceText("{{Date submitted}}", datesubmitted);
body.replaceText("{{Beginning date}}", pdatebegin);
body.replaceText("{{Ending date}}", pdateend);
body.replaceText("{{Invoice salary}}", invoicesalary);
body.replaceText("{{Invoice travel}}", invoicetravel);
body.replaceText("{{Invoice supplies}}", invoicesupplies);
body.replaceText("{{Invoice other}}", invoiceother);
body.replaceText("{{Invoice indirect}}", invoiceindirect);
body.replaceText("{{Invoice amount}}", invoiceamount);
body.replaceText("{{Salary total}}", salarytotal);
body.replaceText("{{Travel total}}", traveltotal);
body.replaceText("{{Supplies total}}", suppliestotal);
body.replaceText("{{Other total}}", othertotal);
body.replaceText("{{Indirect total}}", indirecttotal);
body.replaceText("{{Total outlays to date}}", totaltodate);
doc.saveAndClose();
}
第二个版本肯定是从第二张表中提取数据,这很棒,但它从列中的每个单元格中获取数据,而我需要的是仅来自列底部单元格的数据,这是在每个新表单提交都会添加新行。
【问题讨论】:
标签: google-apps-script google-sheets