Получить последнюю обновленную ячейку в листах Google, а затем захватить строку. ГАЗ - PullRequest
0 голосов
/ 29 августа 2018

Итак, у меня есть форма Google, подающая на лист, и из таблицы я делаю документы Google из шаблона с ответами в таблице.

Форма имеет возможность сохранить на полпути и вернуться позже через пользовательский вопрос, спрашивающий, хотят ли они сохранить и вернуться (это отправляет форму). Скрипт в моей электронной таблице активирует onFormSubmit, поэтому, когда они выходят, шаблон создается с половиной ответов. Когда они в конце концов вернутся и закончат его, я хочу, чтобы скрипт знал, где создать шаблон.

Например, еще 5 строк были добавлены, так как они выходят, и скрипт создает шаблон из ручного изменения строки «var тактика» путем изменения чисел в строке. например если бы я собирался протестировать другую запись, я сначала изменил бы номера на следующую пустую строку, затем, когда форма будет отправлена, она будет использовать эту строку. Не практично. Это не сработает.

Я немного осмотрелся и нашел onEdit (e), но это не сработает, если это не запись manual .

У меня вопрос, есть ли другой способ, кроме 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 Ответ

0 голосов
/ 31 августа 2018

Итак, для тех, у кого такая же проблема, вот мое решение:

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) получает индекс строки из переменной 'row', созданной из 'e.range' при отправке формы.

Это прекрасно работает для меня, если 3 листа были заполнены и 3 строки были добавлены на лист до того, как другой вернулся, чтобы отредактировать свои ответы, сценарий знает, в какой строке найти данные на листе, таким образом создавая правильную шаблон.

...