【发布时间】:2019-02-04 03:04:28
【问题描述】:
所以我有一个 google 表单输入到工作表中,并且从电子表格中,我从模板中制作了 google 文档,其中包含电子表格中的答案。
表单可以在中途保存并稍后通过自定义问题返回,询问他们是否要保存并返回(这会提交表单)。我的电子表格上的脚本激活了 onFormSubmit,所以当他们退出时,模板会用他们一半的答案创建。当他们最终回来完成它时,我希望脚本知道从哪里创建模板。
例如,在它们退出后又添加了 5 行,脚本通过将数字更改为行来手动更改“var strategy”行来创建模板。例如如果我要测试另一个条目,我会先将数字更改为下一个空行,然后在提交表单时,它将使用该行。不实用。它行不通。
我环顾四周,发现 onEdit(e) 但它不起作用,除非它是一个手动条目。
我的问题是,除了 onEdit 还有其他方法可以找到最后一个单元格UPDATED,而不是ADDED,否则它会抓取工作表中的最后一行,即我不想要。如果它抓取最后一个更新的单元格,那么它将抓取正确的行来运行脚本。如果有帮助,我会将我的脚本添加到底部。 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)
}
}
【问题讨论】:
-
给定个人响应的频率是多少?您收到的 sn-p 形式的任何识别信息?此表单是原生 Google 表单,还是以 Google 表单作为响应存储的 HTML 表单?我的想法是,您可以在提前退出时添加带有 uuid 的自定义问题响应,然后找到它。
-
##REF##似乎是一个 id。您不能将其用作唯一 ID 吗? -
@tehhowch2 大家好,##ref## 是一个唯一的 ID,我猜它是识别信息,但是我如何将它添加到脚本中以便它知道要转到哪一行.我需要它,以便在编辑任何旧表单时,脚本将知道在工作表上的何处获取模板文档的信息,而不是我手动更改行或使用工作表中的最后一行。这是一个原生的谷歌表单。
标签: google-apps-script google-sheets google-docs google-forms