0

Я создал форму Google, связанную с электронной таблицей Google, содержащей два листа. Кроме того, я создал функцию в скриптах Google, под названием «handleFormSubmission», что при запуске (по представлению связанной формы):У вас возникли проблемы с запуском функции электронной таблицы Google при отправке формы

  1. создает переменный, содержащее значение этого представления из листа одного: var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues();

  2. затем, если соответствующие ID условие выполняется на обоих листах, устанавливает эти значения из листа одного в соответствующий диапазон на листе два: s1Row.setValues(s0Row);

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

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

Код

function handleFormSubmission() { 
    var ss = SpreadsheetApp.openById("1FmArzo50IV2Wmykgsa89l_EARjzkiyeFDoPaCjGyBZM"); 
    SpreadsheetApp.setActiveSpreadsheet(ss); 
    var sheet = SpreadsheetApp.getActive(); 
    var s0 = sheet.getSheets()[0]; 
    var s0Last = s0.getLastRow(); 
    var s1 = sheet.getSheets()[1]; 
    var s1Last = s1.getLastRow(); 
    var s0Bid = s0.getRange(s0Last, 10).getValue(); 
    var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues(); 
    for (var i = 2; i < s1Last + 1; i++) { 
    var s1Bid = s1.getRange(i, 10).getValue(); 
    var s1First = s1.getRange(i, 2).getValue(); 
    var s1LastName = s1.getRange(i, 3).getValue(); 
    var s1Row = s1.getRange("A"+(i)+":J"+(i)); 
    if (s0Bid === s1Bid) { 
     Logger.log(i + " " + s1First + s1LastName); 
     Logger.log("s0: " + s0Bid); 
     Logger.log("s1: " + s1Bid); 
     Logger.log("Match!"); 
     s1Row.setValues(s0Row); 
     Logger.log("----------------------"); 
     break; 
    } else { 
     Logger.log(i + " " + s1First + s1LastName); 
     Logger.log("s0: " + s0Bid); 
     Logger.log("s1: " + s1Bid); 
     Logger.log("Nope..."); 
     Logger.log("----------------------"); 
    } 
    }; 
};` 

Триггеры текущего проекта

Current Project's Triggers

+1

Я думаю, событие должен быть «Из формы» не «Из таблицы». Попробуйте изменить это, и оно работает. Надеюсь, это поможет! – KRR

+0

Спасибо KRR, но «Из таблицы» - единственный вариант. –

+1

Это потому, что вы работаете над редактором скриптов, открытым из электронной таблицы. Он заполняется, когда вы открываете редактор сценариев из формы и записываете функцию в этот редактор. – KRR

ответ

1

Я думаю, что это событие должно быть "из формы" не "из таблицы". Это потому, что вы работаете над редактором скриптов, открытым из электронной таблицы. Он заполняется, когда вы открываете редактор сценариев из формы и записываете функцию в этот редактор. Надеюсь, это поможет!

1

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

У меня была та же проблема &, решив ее, удалив триггер, создав новую версию скрипта, а затем воссоздав триггер. Не знаю, почему это работает - возможно, эксперт по GAppsScript может объяснить это нам.

Кроме того, почему бы не получить ваши значения представления формы из объекта события? Таким образом, вместо поиска последней строки листа [0] (которая может в крайнем случае не быть необходимой вам, но следующей), вы можете получить доступ к полю, которое вы хотите от объекта события с использованием любого из:

  • e.values (массив значений формы в порядке их появления в таблице)
  • e.namedValues (словарь/хэш-значений формы)