Сценарий Google Apps остановился после одной итерации - PullRequest
1 голос
/ 18 февраля 2020

У меня есть небольшая функция в скрипте приложения Google, которая должна выполнять некоторые действия в течение l oop, то есть у меня есть 3 строки с некоторыми значениями, и для каждой строки мне нужно обновить лист, но, к сожалению, я этого не делаю понимаю почему но только через один l oop программа остановилась! И нет return операторов.

это код:

function movimentiRicorrenti(){

  tempoInizioScript = new Date();

  var rigaInizio = 2

  Logger.log("Data e ora script movimenti ricorrenti: " + Utilities.formatDate(new Date(), "GMT+0200", "dd/MM/yyyy HH:mm"))

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ricorrenti")

  var ultimaRiga = sheet.getLastRow();  // ultima riga con i dati

  Logger.log("ultima riga " +ultimaRiga);

  var dataMovimento = Utilities.formatDate(new Date(), "GMT+0200", "dd/MM/yyyy");

  var dataRangeMovimento;

  var datiMovimento;

  var today = new Date();

  //----------  parte dalla prima riga fino all'ultima del foglio, verifica che il movimento non sia scaduto, verifica se in data odierna andrà eseguito ed esegue eventualmente l'update



for (i=rigaInizio; i<=ultimaRiga; i++){

     dataRangeMovimento = sheet.getRange(i, 1, 1, 9)
     datiMovimento = dataRangeMovimento.getValues();

     Logger.log(convertiMovR(datiMovimento[0][0],datiMovimento[0][1],datiMovimento[0][2],datiMovimento[0][3],datiMovimento[0][4],datiMovimento[0][5],datiMovimento[0][6],datiMovimento[0][7],datiMovimento[0][8]));


}
}

другие 2 функции

 function convertiMovR(cr, cat, conto, importo, ricorrenza, giornoM, giornoS, giornoA, scadenza){

    today = new Date();
    if (typeof importo != "number"){
       return false;
    }
    if (scadenza >= today){
       if (ricorrenza == "mensile" && today.getDate() == giornoM){
         aggiornaBil(cr,cat,conto,importo,"movimento ricorrente ogni mese il giorno " + giornoM);
         return true;
       }
       if (ricorrenza == "annuale"){
         if (today.getMonth()+1 == giornoA.getMonth()+1 && today.getDate() == giornoA.getDate() + 1 && today.getYear() == giornoA.getYear()){
           aggiornaBil(cr,cat,conto,importo,"movimento ricorrente ogni anno il giorno "+ Utilities.formatDate(new Date(giornoA), "GMT+0200", "dd/MM/yyyy"));
           return true;
         }
       }
       if (ricorrenza == "giornaliera"){
          aggiornaBil(cr,cat,conto,importo,"movimento ricorrente giornaliero");
          return true;
       }
       if (ricorrenza == "settimanale"){
         var giornoSett = 7;
           switch(giornoS)  {
              case "domenica":
                  giornoSett = 0;
                  break;    
              case "lunedì":
                  giornoSett = 1;
                  break; 
              case "martedì":
                  giornoSett = 2;
                  break; 
              case "mercoledì":
                  giornoSett = 3;
                  break; 
              case "giovedì":
                  giornoSett = 4;
                  break;         
              case "venerdì":
                  giornoSett = 5;
                  break; 
              case "sabato":
                  giornoSett = 6;
                  break; 
           }
           if (giornoSett == 7){
                var corpo = "Verificare il movimento ricorrente alla riga " + i + " inserire un giorno della settimana dal lunedì alla domenica";
                MailApp.sendEmail("xxxxxx@gmail.com", "Errore movimenti ricorrenti", corpo, {name: "Bilancio Gianluca", htmlBody: corpo})
                Logger.log("Script movimenti ricorrenti eseguito in data/ora " + Utilities.formatDate(new Date(), "GMT+0200", "dd/MM/yyyy hh:mm") + " con errori! Mail inviata a xxxxxx@gmail.com")
           }

         if (new Date().getDay() == giornoSett){

             var nScript = sheet.getRange(i, 10).getValue();
             nScript = nScript + 1;
             sheet.getRange(i, 10).setValue(nScript);

             aggiornaBil(cr,cat,conto,importo,"movimento ricorrente ogni settimana di " + giornoS);
             return true;
         }
       }
    }
}


function aggiornaBil(CostoRicavo, Categoria, Conto, Importo, Descrizione){

  var dataMovimento = Utilities.formatDate(new Date(), "GMT+0200", "dd/MM/yyyy");

    if (CostoRicavo == "costo"){
      var rigaAgg = rigaAggiornamentoCosti(Conto);
      if (rigaAgg == 0){
        var corpo = "Il movimento inserito in data <b>" +
            Utilities.formatDate(new Date(), "GMT+0200", "dd/MM/yyyy")+
            "</b> relativo a <b>" + Conto +
            "</b> non ha corrispondenze in bilancio. Si prega di controllare il foglio di lavoro. Log di sistema:" + Logger.getLog() ;
          MailApp.sendEmail("xxxxxx@gmail.com", "Errore corrispondenza in bilancio", corpo, {name: "Bilancio Gianluca", htmlBody: corpo})

          // uscita dalla sub
          Logger.log("Conto non corrispondente!! Mail inviata a xxxxxx@gmail.com")
          return;
      }

      var foglioBilancio = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("bilancio")
      var rangeDaAggiornare = foglioBilancio.getRange(rigaAgg, colonnaCostiBilancio + 1)
      var importoDaAggiornare = rangeDaAggiornare.getValue();
      var importoAggiornato = importoDaAggiornare + Importo;
      Logger.log("Importo da aggiornare:" + cambiaSeparatore(importoDaAggiornare) + " - Importo aggiornato: " + cambiaSeparatore(arrotondaEuro(importoAggiornato)));
      rangeDaAggiornare.setValue(importoAggiornato);

   }
   if (CostoRicavo == "ricavo"){
      var rigaAgg = rigaAggiornamentoRicavi(Conto);
      if (rigaAgg == 0){
        var corpo = "Il movimento inserito in data <b>" +
            Utilities.formatDate(new Date(dataMovimento), "GMT+0200", "dd/MM/yyyy")+
            "</b> relativo a <b>" + Conto +
            "</b> non ha corrispondenze in bilancio. Si prega di controllare il foglio di lavoro. Log di sistema:" + Logger.getLog() ;
          MailApp.sendEmail("xxxxxx@gmail.com", "Errore corrispondenza in bilancio", corpo, {name: "Bilancio Gianluca", htmlBody: corpo})

          // uscita dalla sub
          Logger.log("Conto non corrispondente!! Mail inviata a xxxxxx@gmail.com")
          return;
      }

      var foglioBilancio = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("bilancio")
      var rangeDaAggiornare = foglioBilancio.getRange(rigaAgg, colonnaRicaviBilancio + 1)
      var importoDaAggiornare = rangeDaAggiornare.getValue();
      var importoAggiornato = importoDaAggiornare + Importo;
      Logger.log("Importo da aggiornare:" + cambiaSeparatore(importoDaAggiornare) + " - Importo aggiornato: " + cambiaSeparatore(arrotondaEuro(importoAggiornato)));
      rangeDaAggiornare.setValue(importoAggiornato);
   }


   var arrayMovimento = [[dataMovimento, CostoRicavo, Categoria, Conto, cambiaSeparatore(Importo), Descrizione]]

   Logger.log(arrayMovimento);

   var foglioMovimenti = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("movimenti")

   foglioMovimenti.insertRowAfter(1); 

   foglioMovimenti.getRange(2, 1, 1, 6).setValues(arrayMovimento);

   foglioMovimenti.getRange(3,8,1,1).copyTo(foglioMovimenti.getRange(2,8,1,1))

   foglioBilancio = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("verifica")
   rangeDaAggiornare = foglioBilancio.getRange(1, 5)
   importoDaAggiornare = rangeDaAggiornare.getValue();
   importoAggiornato = importoDaAggiornare + Importo;
   rangeDaAggiornare.setValue(importoAggiornato);


   Logger.log("Aggiornamento completato!");  
}

log:

[20-02-17 23:07:22:486 CET] Data e ora script movimenti ricorrenti: 18/02/2020 00:07
[20-02-17 23:07:22:757 CET] ultima riga 4
[20-02-17 23:07:23:206 CET] cellulare riga n. 63
[20-02-17 23:07:23:211 CET] Importo da aggiornare:-29 - Importo aggiornato: -31
[20-02-17 23:07:23:212 CET] [[18/02/2020, costo, comunicazioni, cellulare, -2, movimento ricorrente ogni anno il giorno 17/02/2020]]
[20-02-17 23:07:24:067 CET] Aggiornamento completato!
[20-02-17 23:07:24:067 CET] true

и остановлен .. но есть другие 2 строки ..

результаты после put Logger.log ("r:% s, u% s,% s", rigaInizio, ultimaRiga , «до / после») converttiMovR

Logger.log("r:%s,u%s,%s",rigaInizio,ultimaRiga,"before")
Logger.log(convertiMovR(datiMovimento[0][0],datiMovimento[0][1],datiMovimento[0][2],datiMovimento[0][3],datiMovimento[0][4],datiMovimento[0][5],datiMovimento[0][6],datiMovimento[0][7],datiMovimento[0][8]));
Logger.log("r:%s,u%s,%s",rigaInizio,ultimaRiga,"after")

[20-02-17 23: 18: 41: 155 PST] Данные и сценарий movimenti ricorrenti: 18/02/2020 09: 18

[20-02-17 23: 18: 41: 422 PST] ultima riga 4

[20-02-17 23: 18: 41: 580 PST] r: 2.0, u4.0, до

[20-02-17 23: 18: 41: 858 PST] cellulare riga n. 63

[20-02-17 23: 18: 41: 863 PST] Importo da aggiornare: -31 - Importo aggiornato: -33

[20-02-17 23:18: 41: 865 PST] [[18/02/2020, costo, comunicazioni, cellulare, -2, movicmento ricorrente ogni anno il giorno 17/02/2020]]

[20-02-17 23:18 : 42: 537 PST] Aggiornamento completet!

[20-02-17 23: 18: 42: 538 PST] true

[20-02-17 23: 18: 42: 538 PST] r: 2.0, u4.0, после

, но ... может быть, я понял ... for ... next l oop не ждет, когда converttiMovR завершится

я пытаюсь поставить

 Logger.log("value of i before call convertiMovR " + i)
 Logger.log("r:%s,u%s,%s",rigaInizio,ultimaRiga,"before")
 Logger.log(convertiMovR(datiMovimento[0][0],datiMovimento[0][1],datiMovimento[0][2],datiMovimento[0][3],datiMovimento[0][4],datiMovimento[0][5],datiMovimento[0][6],datiMovimento[0][7],datiMovimento[0][8]));
 Logger.log("r:%s,u%s,%s",rigaInizio,ultimaRiga,"after")
 Logger.log("value of i after call convertiMovR " + i)

, и в результате получается

[20-02-18 08:39:32:396 CET] Data e ora script movimenti ricorrenti: 18/02/2020 09:39
[20-02-18 08:39:32:678 CET] ultima riga 4
[20-02-18 08:39:32:807 CET] value of i before call convertiMovR 2
[20-02-18 08:39:32:808 CET] r:2.0,u4.0,before
[20-02-18 08:39:33:057 CET] cellulare riga n. 63
[20-02-18 08:39:33:061 CET] Importo da aggiornare:-41 - Importo aggiornato: -43
[20-02-18 08:39:33:062 CET] [[18/02/2020, costo, comunicazioni, cellulare, -2, movimento ricorrente ogni anno il giorno 17/02/2020]]
[20-02-18 08:39:33:706 CET] Aggiornamento completato!
[20-02-18 08:39:33:707 CET] true
[20-02-18 08:39:33:707 CET] r:2.0,u4.0,after
[20-02-18 08:39:33:708 CET] value of i after call convertiMovR 60

Я думаю, мне нужно поменять for .. затем с другими l oop может быть do..l oop или есть какое-либо утверждение, которое может «дождаться» выполнения converttiMovR? ..

стенограмма

[20-02-17 23:39:32:386 PST] Avvio dell'esecuzione
[20-02-17 23:39:32:395 PST] Utilities.formatDate([Mon Feb 17 23:39:32 PST 2020, GMT+0200, dd/MM/yyyy HH:mm]) [0 secondi]
[20-02-17 23:39:32:396 PST] Logger.log([Data e ora script movimenti ricorrenti: 18/02/2020 09:39, []]) [0 secondi]
[20-02-17 23:39:32:398 PST] SpreadsheetApp.getActiveSpreadsheet() [0 secondi]
[20-02-17 23:39:32:573 PST] SpreadsheetApp.Spreadsheet.getSheetByName([ricorrenti]) [0,175 secondi]
[20-02-17 23:39:32:678 PST] SpreadsheetApp.Sheet.getLastRow() [0,103 secondi]
[20-02-17 23:39:32:679 PST] Logger.log([ultima riga 4, []]) [0 secondi]
[20-02-17 23:39:32:679 PST] Utilities.formatDate([Mon Feb 17 23:39:32 PST 2020, GMT+0200, dd/MM/yyyy]) [0 secondi]
[20-02-17 23:39:32:680 PST] SpreadsheetApp.Sheet.getRange([2, 1, 1, 9]) [0 secondi]
[20-02-17 23:39:32:807 PST] SpreadsheetApp.Range.getValues() [0,127 secondi]
[20-02-17 23:39:32:808 PST] Logger.log([value of i before call convertiMovR 2, []]) [0 secondi]
[20-02-17 23:39:32:808 PST] Logger.log([r:%s,u%s,%s, [2.0, 4.0, before]]) [0 secondi]
[20-02-17 23:39:32:808 PST] Utilities.formatDate([Sun Feb 16 15:00:00 PST 2020, GMT+0200, dd/MM/yyyy]) [0 secondi]
[20-02-17 23:39:32:809 PST] Utilities.formatDate([Mon Feb 17 23:39:32 PST 2020, GMT+0200, dd/MM/yyyy]) [0 secondi]
[20-02-17 23:39:32:809 PST] SpreadsheetApp.getActiveSpreadsheet() [0 secondi]
[20-02-17 23:39:32:810 PST] SpreadsheetApp.Spreadsheet.getSheetByName([bilancio]) [0 secondi]
[20-02-17 23:39:32:910 PST] SpreadsheetApp.Sheet.getLastRow() [0,1 secondi]
[20-02-17 23:39:32:911 PST] SpreadsheetApp.Sheet.getRange([3, 1, 130, 1]) [0 secondi]
[20-02-17 23:39:33:056 PST] SpreadsheetApp.Range.getValues() [0,145 secondi]
[20-02-17 23:39:33:058 PST] Logger.log([cellulare riga n. 63, []]) [0 secondi]
[20-02-17 23:39:33:059 PST] SpreadsheetApp.getActiveSpreadsheet() [0 secondi]
[20-02-17 23:39:33:059 PST] SpreadsheetApp.Spreadsheet.getSheetByName([bilancio]) [0 secondi]
[20-02-17 23:39:33:060 PST] SpreadsheetApp.Sheet.getRange([63, 2]) [0 secondi]
[20-02-17 23:39:33:060 PST] SpreadsheetApp.Range.getValue() [0 secondi]
[20-02-17 23:39:33:062 PST] Logger.log([Importo da aggiornare:-41 - Importo aggiornato: -43, []]) [0 secondi]
[20-02-17 23:39:33:062 PST] SpreadsheetApp.Range.setValue([-43.0]) [0 secondi]
[20-02-17 23:39:33:063 PST] Logger.log([[[18/02/2020, costo, comunicazioni, cellulare, -2, movimento ricorrente ogni anno il giorno 17/02/2020]], []]) [0 secondi]
[20-02-17 23:39:33:064 PST] SpreadsheetApp.getActiveSpreadsheet() [0 secondi]
[20-02-17 23:39:33:064 PST] SpreadsheetApp.Spreadsheet.getSheetByName([movimenti]) [0 secondi]
[20-02-17 23:39:33:225 PST] SpreadsheetApp.Sheet.insertRowAfter([1]) [0,16 secondi]
[20-02-17 23:39:33:226 PST] SpreadsheetApp.Sheet.getRange([2, 1, 1, 6]) [0 secondi]
[20-02-17 23:39:33:431 PST] SpreadsheetApp.Range.setValues([[[18/02/2020, costo, comunicazioni, cellulare, -2, movimento ricorrente ogni anno il giorno 17/02/2020]]]) [0,205 secondi]
[20-02-17 23:39:33:432 PST] SpreadsheetApp.Sheet.getRange([3, 8, 1, 1]) [0 secondi]
[20-02-17 23:39:33:432 PST] SpreadsheetApp.Sheet.getRange([2, 8, 1, 1]) [0 secondi]
[20-02-17 23:39:33:433 PST] SpreadsheetApp.Range.copyTo([Range]) [0 secondi]
[20-02-17 23:39:33:433 PST] SpreadsheetApp.getActiveSpreadsheet() [0 secondi]
[20-02-17 23:39:33:434 PST] SpreadsheetApp.Spreadsheet.getSheetByName([verifica]) [0 secondi]
[20-02-17 23:39:33:434 PST] SpreadsheetApp.Sheet.getRange([1, 5]) [0 secondi]
[20-02-17 23:39:33:705 PST] SpreadsheetApp.Range.getValue() [0,27 secondi]
[20-02-17 23:39:33:706 PST] SpreadsheetApp.Range.setValue([-41.0]) [0 secondi]
[20-02-17 23:39:33:707 PST] Logger.log([Aggiornamento completato!, []]) [0 secondi]
[20-02-17 23:39:33:707 PST] Logger.log([true, []]) [0 secondi]
[20-02-17 23:39:33:708 PST] Logger.log([r:%s,u%s,%s, [2.0, 4.0, after]]) [0 secondi]
[20-02-17 23:39:33:709 PST] Logger.log([value of i after call convertiMovR 60, []]) [0 secondi]
[20-02-17 23:39:33:994 PST] Esecuzione riuscita [1,315 secondi di esecuzione totale]

1 Ответ

2 голосов
/ 18 февраля 2020

Выпуск:

  • Изменение i вне l oop.

Решение:

  • Ограничить i областью блоков, используя let

Фрагмент:

for (let i=rigaInizio; i<=ultimaRiga; i++){

Ссылки:

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