因此,我有一个Google表单输入表格,然后从电子表格中使用包含电子表格中答案的模板制作Google文档。
该表格可以保存到中间,然后通过自定义问题询问他们是否要保存并返回(此提交表格),稍后再返回。电子表格上的脚本会激活onFormSubmit,因此当他们退出时,模板将用一半的答案创建。当他们最终回来并完成任务时,我希望脚本知道从哪里创建模板。
例如,自退出以来,又添加了5行,并且脚本通过将行号更改为“ var tactics”行的手动更改来创建模板。例如如果要测试另一个条目,则将数字首先更改为下一个空行,然后在提交表单时将使用该行。不切实际。这行不通。
我环顾了一下,发现onEdit(e),但是除非它是 manual 条目,否则它不会起作用。
我的问题是,除了onEdit以外,还有其他方法可以找到最后一个单元格 UPDATED ,而不是 ADDED ,否则它将获取工作表中的最后一行,我不要如果它获取最后更新的单元格,则它将获取正确的行以为其运行脚本。如果有帮助,我会将脚本添加到底部。身份证等显然已被删除。
有什么想法吗?
function onFormSubmit(e) {
var Sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var headers = Sheets.Spreadsheets.Values.get('myID', 'A1:U1');
var tactics = Sheets.Spreadsheets.Values.get('myID', 'A6:U6');
var templateID = "myID"
for(var i = 0; i < tactics.values.length; i++){
var Timestamp = tactics.values[i][0];
var IDCFREF = tactics.values[i][2];
var raisedby = tactics.values[i][4];
var AccMan = tactics.values[i][6];
var Contrib = tactics.values[i][7];
var Contract = tactics.values[i][8];
var CompName = tactics.values[i][9];
var ValidFrom = tactics.values[i][10];
var ValidTo = tactics.values[i][11];
var Freq = tactics.values[i][12];
var PDetailFreq = tactics.values[i][13];
var BillType = tactics.values[i][14];
var TypeOfRebate = tactics.values[i][15];
var RebateDetails = tactics.values[i][16];
var RTarget = tactics.values[i][17];
var GiveDeets = tactics.values[i][19];
var WhyGiveRebate = tactics.values[i][20];
var documentID = DriveApp.getFileById(templateID).makeCopy().getId();
DriveApp.getFileById(documentID).setName('Rebate ' + IDCFREF + ' Request');
var body = DocumentApp.openById(documentID).getBody();
var header = DocumentApp.openById(documentID).getHeader();
header.replaceText('##IDCF##', IDCFREF)
body.replaceText('##REF##', IDCFREF)
body.replaceText('##RAISED##', raisedby)
body.replaceText('##ACCMAN##', AccMan)
body.replaceText('##CONTRIB##', Contrib)
body.replaceText('##SIGNED##', Contract)
body.replaceText('##NAME##', CompName)
body.replaceText('##FROM##', ValidFrom)
body.replaceText('##TO##', ValidTo)
body.replaceText('##FREQ##', Freq)
body.replaceText('##BESPOKE##', PDetailFreq)
body.replaceText('##BILL##', BillType)
body.replaceText('##TYPE##', TypeOfRebate)
body.replaceText('##DEETS##', RebateDetails)
body.replaceText('##TARGET##', RTarget)
body.replaceText('##FULL##', GiveDeets)
body.replaceText('##ELAB##', WhyGiveRebate)
}
}
答案 0 :(得分:0)
因此,对于有相同问题的任何人,这是我的解决方案:
function onFormSubmit(e) {
var range = e.range;
var ss = range.getSheet();
var row = range.getRowIndex();
var tactics = Sheets.Spreadsheets.Values.get('ID', "A:AQ"+row);
它的工作原理是删除表单响应表中的每一行,直到最后一个条目,然后再瞧瞧。 (“ A:AQ” + row)从表单提交时从'e.range'创建的变量'row'获取行索引。
这对我来说非常有用,如果填写了3个表单并将3行添加到工作表中,然后又返回另一行来编辑其响应,则脚本知道在工作表中查找数据的行,从而创建了正确的行模板。