当前位置: 首页 > 知识库问答 >
问题:

获取Google sheets中最后更新的单元格,然后获取该行。气体

琴英华
2023-03-14

因此,我将一个谷歌表单输入到一张表格中,然后从电子表格中,我根据电子表格中的答案模板制作谷歌文档。

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

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

我四处看了一下,发现了onEdit(e),但除非是手动输入,否则它不起作用。

我的问题是,除了onEdit之外,是否还有其他方法可以找到最后一个更新的单元格,而不是添加的单元格,否则它将获取工作表中的最后一行,这是我不想要的。如果它获取最后更新的单元格,那么它将获取要运行脚本的正确行。如果有帮助的话,我会将脚本添加到底部。身份证等明显已被删除。

有什么想法吗?

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)

}
}

共有1个答案

梁宪
2023-03-14

所以对于任何有同样问题的人,我的解决方案是:

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”行)从表单提交时从“e.range”创建的变量“行”中获取行索引。

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

 类似资料:
  • 问题内容: 如何使用PHP获取MySQL中最后更新的行的ID? 问题答案: 我找到了这个问题的答案:) *由aefxx *编辑 可以进一步扩展此技术以检索受更新语句影响的每一行的ID: 这将返回一个字符串,其中所有ID都由逗号连接。

  • 问题内容: 如何在以下代码中获取流或列表的最后一个元素? 哪里是: 如您所见,获得第一个元素一定并不困难。 但是,获得单线的最后一个元素确实是一个痛苦: 看来我无法直接从。(仅对有限的流有意义) 这似乎也不能得到像和从接口,这实在是一种痛苦。 我看不到在接口中不提供and 方法的任何参数,因为其中的元素是有序的,而且大小是已知的。 但是按照原始答案:如何获得有限的最后一个元素? 就个人而言,这是我

  • 我有个问题。。。代码运行正常,但无法获取最后一行和最后一列的最后一个单元格的值。下面是代码。。。请引导 使用此代码,我动态地向JTable添加行:if(e.getSource()==addb){ 下面是从JTable行以及以后而不是系统中获取值的代码。出来println()我将向数据库发送数据。。。

  • 更新Xamarin后。表单到最新版本我得到以下错误: at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/2923/52635947/source/mono/external/referencesource/mscorlib/system/

  • 如何在下面的代码中获取流或列表的最后一个元素? 其中是: 正如您所看到的,使用特定的获取第一个元素并不难。 null 我看不出在接口中没有提供和方法的任何理由,因为其中的元素是有序的,而且大小是已知的。 但正如最初的答案:如何获得有限的最后一个元素? 就我个人而言,这是我能得到的最接近的结果:

  • 快速编辑:正如下面指出的,我应该做BFS,但我需要一个点来停止检索新字段,我还没有时间考虑。谢谢你的帮助! 我试图使用Java反射递归地获取类的字段,本质上创建一个树来显示 这是一个递归解析器,所以我认为递归显示函数是很酷的。不幸的是,它压垮了我。 示例类Foo,具有Class1和Class2字段,每个字段可以有更多不同类的字段: 我的递归方法: println已经用于测试,Foo的一个示例输出(