Google Script находит значение в массиве и значение добавления - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать «простую» систему входа и выхода, основанную на qr-кодах.Я получаю ответы в порядке.Мне нужно оценить, существует ли значение в первом столбце или нет, если он не существует, добавить все в новую строку, если не проверить, совпадает ли день, если затем добавить текущее время в 4-й столбец.

 efunction alsubmit(e) {
  //getting the form ready
  var formResponse = e.response;
  var itemResponses = formResponse.getItemResponses();
  //getting the items
  var nombre = itemResponses[0].getResponse()
  var tiempo =  formResponse.getTimestamp();
  // get the spreadsheet where the info will be stored ready  
  var ss = SpreadsheetApp.openById('1gqbTqb2xOt3rORKcQ_7weGynj9eWypt5gS6ahKVfci8');
  var dia = tiempo.getDate();
  var hoja = tiempo.getMonth();
  var sheet = ss.getSheets()[hoja+1];
  // coordenates
  var last = sheet.getLastRow();
  var row = 0;
  // values from the sheet
  var vector2d = sheet.getRange(2,1,last,4).getValues();
 // switch variable
  var option = 0;
Evaluar(vector2d, nombre, dia, option);
  var range = sheet.getRange(2,6);
  range.setValue(option);
  switch(option){
    case 1:
  var range = sheet.getRange(last+1,1);
  range.setValue(nombre);
  var range = sheet.getRange(last+1,2);
  range.setValue(dia);
  var range = sheet.getRange(last+1,3);
  range.setValue(tiempo);
  break    
    case 2:
  var range = sheet.getRange(row,4);
  range.setValue(tiempo);
  break   
 }

}

  function Evaluar(vector2d, nombre, dia, option, row){
      for (var i=0; i<vector2d.length; i++){
        if (vector2d[i][0] != nombre){
          option =1;
          break
        }
        if (vector2d[i][0] == nombre && vector2d[i][1] == dia && vector2d[i][3] == null){
          option =2;
          row = i+1;
          break
        }
        if (vector2d[i][0] == nombre && vector2d[i][1] == dia && vector2d[i][3] != null){
          option =1;
          break
        }

      }
    }

Это всегда дает мне случай 1.
Спасибо за помощь !!

1 Ответ

0 голосов
/ 02 ноября 2018

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

Причина этого состояла в том, что первое, что нужно было оценить, было то, было ли имя ученика на целевом листе.Обратите внимание на команду «break».

if (vector2d[i][0] != nombre){
          option =1;
          break
}

Таким образом, требовалось только, чтобы имя студента не совпадало с именем на целевом листе, а оператор IF был оценен как ИСТИНА, а последующий "разрыв" завершил весь цикл for.В результате первый результат не был удовлетворительно оценен, а два других результата никогда не оценивались.

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

Кроме того, как отмечено в комментариях, оценкаВ фазу возвращено до двух предметов: 1) Вариант и 2) Строка.Это было решено путем создания объекта Javascript.


function onFormSubmit(e) {

    //getting the response items
    //Logger.log("%s", JSON.stringify(e));//DEBUG
    var nombre = e.namedValues['Name'][0];
    var tiempo = e.namedValues['Marca temporal'][0];
    // Logger.log("nombre = "+ nombre+", and time stamp is "+tiempo); //DEBUG

    // get timestamp 
    var timestamp = e.range.getValues()[0];
    // Logger.log("timestamp = "+timestamp);//DEBUG

    // get the day and month from the timestamp
    var hoja = timestamp[0].getMonth();
    var dia = timestamp[0].getDate();
    // Logger.log("timemonth"+hoja+", and dia = "+dia);// DEBUG

    // get the sheet number
    var sheetnum = +hoja + 1;
    // Logger.log("sheetnum = "+sheetnum);//DEBUG

    // set up the target spreadsheet and sheet
    var sobid = SpreadsheetApp.openById("1gqbTqb2xOt3rORKcQ_7weGynj9eWypt5gS6ahKVfci8"); 
    var spsheets = sobid.getSheets();
    var monthsheet = spsheets[sheetnum];
    // Logger.log("Sheet#:"+sheetnum+", name: "+monthsheet.getName());//DEBUG

    // get the last row on the target
    var last = monthsheet.getLastRow();
    // Logger.log("last = "+last);//DEBUG

    // get the data from the target
    var vector2d = monthsheet.getRange(2, 1, last, 4).getValues();

    // Evaluate whether student name is already on Target &/or day and timestamp are entered
    var reply = Evaluar(vector2d, nombre, dia, option, last);
    //Logger.log("Evaluar result #"+reply["result"]+"; option = "+reply["option"]+"; row = "+reply["row"]+"; i = "+(reply["i"]+2));//DEBUG

    //copy the "option" number to the target
    var range = monthsheet.getRange(2, 6); // F2
    range.setValue(reply["option"]); //copy option to //F2

    //use results and switch to identify fields to be updated on target.
    switch (reply["option"]) {
        case 1:
            var range = monthsheet.getRange(last + 1, 1); //Ax
            range.setValue(nombre); //paste name
            var range = monthsheet.getRange(last + 1, 2); //Bx
            range.setValue(dia); //paste day
            var range = monthsheet.getRange(last + 1, 3); //Cx
            range.setValue(tiempo); //paste the timestamp
            break
        case 2:
            var range = sheet.getRange(reply["row"], 4);
            range.setValue(tiempo);
            break;
    }
}


function Evaluar(vector2d, nombre, dia, option, last) {

    var row = 0;
    var i = 0;
    var reply = "";
    //loop #1 evaluate if student name exists and status of day and duration
    for (var i = 0; i < vector2d.length; i++) {

        if (vector2d[i][0] == nombre) {
            if (vector2d[i][0] == nombre && vector2d[i][1] == dia) {
                if (vector2d[i][0] == nombre && vector2d[i][1] == dia && vector2d[i][3] == "") {
                    reply = {
                        "option": 1,
                        "row": 0,
                        "result": 'name, day no date',
                        "i": (+i + 2)
                    };
                    break;
                } else {
                    reply = {
                        "option": 1,
                        "row": 0,
                        "result": 'name, day, and date',
                        "i": (+i + 2)
                    };
                    break;
                }
            }
        }
    } // end for


    //loop #2 - evaluate if student name is on the target sheet
    for (var x = 0; x < vector2d.length; x++) {

        if (vector2d[x][0] == nombre) {
            break;
        } else {
            reply = {
                "option": 1,
                "row": 0,
                "result": 'no name',
                "i": (+i + 2)
            };
        }

    } // end for
    return reply;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...