2014-10-14 6 views
0

У меня есть электронная таблица Google с надстройкой, которая берет данные из формы и запускается при отправке формы. У меня также есть еще один Add-on, который выталкивает данные из этой таблицы в другую таблицу - назовем ее spreadheet2 здесь. В электронной таблице 2 у меня есть собственный скрипт с функцией copyLastRow(), которая копирует последнюю строку из этой таблицы в другую таблицу - назовем ее электронной таблицей3. Мой скрипт должен добавить новую строку из таблицы 2 в электронную таблицу3. Он запускается нормально, когда я запускаю его вручную, но он не запускается через триггер проекта, который я установил для ресурсов редактора сценариев. Я пробовал оба из триггеров Edit и on Change, но они просто не запускаются, когда данные выталкиваются из электронной таблицы2 , Сценарий работает, когда я фактически редактирую таблицу2. Однако это плохо для того, что мне нужно - мне действительно нужен сценарий для работы без ручного вмешательства. Можете ли вы, пожалуйста, помочь?Скопируйте последнюю строку в другую таблицу после отправки формы

function copyLastRow() { 
var target = SpreadsheetApp.openById('xxxxxxxxx').getSheetByName('Sheet1'); 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
var lastrow = sheet.getLastRow(); 
var sourceData = sheet.getRange(lastrow, 1, 1, 53).getValues(); 
target.appendRow(sourceData[0]); 

EDIT: Я обновил код - я понял, что оставил предыдущую версию кода здесь.

+0

Какая у вас проблема? Что вы уже пробовали, чтобы решить эту проблему? – Mogsdad

+0

Мой скрипт работает, но я просто хочу убедиться, что он будет запускаться каждый раз, когда будет отправлена ​​форма, даже если два или более пользователей одновременно отправят форму. Просто проверяю, должен ли я добавить еще какой-то код в скрипт. – Mica

+0

@Mogsdad Я отредактировал мое сообщение выше, чтобы сделать его яснее - ну, я надеюсь, что я сделал это яснее. Любая помощь будет принята с благодарностью. – Mica

ответ

1

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

В чем проблема? Когда выполняется copyLastRow(), предполагается, что последняя строка исходной таблицы содержит ответ, который также вызывает функцию. Однако, прежде чем он перейдет к чтению этой строки, другой пользователь может отправить форму. (В конце концов, эта функция также будет инициирована этой обработкой и может обрабатывать одну и ту же строку во второй раз.)

Простейшим улучшением в этой ситуации является использование объекта события, предоставляемого триггерной функции как параметр. См. Google Sheet Events для некоторых деталей фона.

Недавно представленные ответы находятся в event.values, который представляет собой массив - именно то, что необходимо для .appendRow(). Вот как мы можем обновить copyLastRow функции:

function copyLastRow(event) { 
    var target = SpreadsheetApp.openById('xxxxxxxxx').getSheetByName('Sheet1'); 
    target.appendRow(event.values); 
} 

Теперь это не имеет значения, сколько пользователей представить формы - каждый из них будет обрабатываться однозначно с помощью этой функции.

+0

, если вы можете нести со мной: как мне определить e.values ​​в моем коде? Я предполагаю, что я должен настроить переменные для каждого столбца следующим образом: var Timestamp = e.values ​​[0] и т. Д. Я предполагаю, что сохраняю varrow в моем коде. Я попытался запустить код как вручную, так и с помощью устанавливаемого триггера при отправке формы. Bt Я получаю сообщение об ошибке «ReferenceError:« e »не определен». Очень жаль моей неопытности. – Mica

+0

У меня была опечатка ... в большинстве примеров показано 'e', я намеревался использовать' event' для ясности, но пропустил одно редактирование. Исправлено. Извините за это - просто измените 'e' на' event'. – Mogsdad

+0

Мне очень стыдно спрашивать, но возможно ли вам показать, что он обновил код в полном объеме? Я просмотрел документацию и различные примеры, но я просто не понимаю, как получаю сообщения об ошибках. Я буду продолжать пытаться, но я очень надеюсь, что ты вернешься ко мне. – Mica

Смежные вопросы