获取 Google 表中最后更新的 CELL,然后抓取该行。气体

Get the last updated CELL in Google sheets and then grab the row. GAS

所以我有一个 google 表单输入到 sheet,并且从传播 sheet 我正在制作 google 文档的模板中的答案点差sheet。

表单能够在中途保存并稍后通过自定义问题返回,询问他们是否要保存并返回(这会提交表单)。我的 spreadsheet 上的脚本会激活 onFormSubmit,因此当他们退出时,会创建包含他们一半答案的模板。当他们最终回来完成它时,我希望脚本知道从哪里创建模板。

例如,退出后又添加了 5 行,脚本通过更改行的数字来手动更改行 'var tactics' 创建模板。例如如果我要测试另一个条目,我会先将数字更改为下一个空行,然后在提交表单时,它会使用该行。不实用。这是行不通的。

我环顾四周并找到了 onEdit(e) 但这不起作用,除非它是 manual 条目。

我的问题是,除了 onEdit 之外,还有其他方法可以找到最后一个单元格 UPDATED,而不是 ADDED 否则它会抓取sheet 中的最后一行,我不想要。如果它抓取最后更新的单元格,那么它将抓取正确的行到 运行 的脚本。如果有帮助,我会将我的脚本添加到底部。 ID 等显然已被删除。

有什么想法吗?

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)

}
}

对于遇到同样问题的人,这是我的解决方案:

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);

它的工作方式是删除表单响应 sheet 中的每一行,直到最后一个条目,然后瞧。 ("A:AQ"+row) 从提交表单时从 'e.range' 创建的变量 'row' 获取行索引。

这对我来说非常有用,如果填写了 3 个表格并在 sheet 中添加了 3 行,然后另一个人回来编辑他的回复,脚本就知道在哪一行中找到数据sheet,从而创建正确的模板。