gpt4 book ai didi

google-apps-script - 在 Google 表格中获取最后更新的 CELL,然后抓取该行。气体

转载 作者:行者123 更新时间:2023-12-04 15:55:02 26 4
gpt4 key购买 nike

因此,我将一个 google 表单输入到工作表中,然后从电子表格中,我使用电子表格中的答案模板制作 google 文档。

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

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

我环顾四周并找到了 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)

}
}

最佳答案

所以对于遇到相同问题的任何人,这是我的解决方案:

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 行,脚本知道在工作表中的哪一行找到数据,从而创建正确的模板。

关于google-apps-script - 在 Google 表格中获取最后更新的 CELL,然后抓取该行。气体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52075502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com