Google apps脚本仅经过一次迭代就停止了

问题描述 投票:0回答:1

我在google app脚本中有一个小功能,必须在for循环中做一些事情,即我有3行,并带有一些值,每行我必须更新一个工作表,但不幸的是,我不明白为什么,但是之后仅一个循环,程序就停止了!而且没有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("[email protected]", "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 [email protected]")
           }

         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("[email protected]", "Errore corrispondenza in bilancio", corpo, {name: "Bilancio Gianluca", htmlBody: corpo})

          // uscita dalla sub
          Logger.log("Conto non corrispondente!! Mail inviata a [email protected]")
          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("[email protected]", "Errore corrispondenza in bilancio", corpo, {name: "Bilancio Gianluca", htmlBody: corpo})

          // uscita dalla sub
          Logger.log("Conto non corrispondente!! Mail inviata a [email protected]")
          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

并且已停止..但还有其他两行..

放置Logger.log(“ r:%s,u%s,%s”,rigaInizio,ultimaRiga,“之前/之后”)convertiMovR之后的结果

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]数据或脚本活动信息:18/02/2020 09:18

[[20-02-17 23:18:41:422 PST]最终版本4

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

[[20-02-17 23:18:41:858 PST]蜂窝网。 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,celle,-2,movimento ricorrente ogni anil il giorno 17/02/2020]]]

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

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

[[20-02-17 23:18:42:538 PST] r:2.0,u4.0,之后

但是..也许我已经理解了... for ..下一个循环不等待convertiMovR完成

我尝试放

 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 ..下一步,也许做..循环,或者有任何语句可以'等待'convertiMovR的执行? ..

成绩单

[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]

我在google app脚本中有一个小功能,必须在for循环中做一些事情,即我有3行带有一些值,并且每行我必须更新一个工作表,但是不幸的是我没有...] >

for-loop google-apps-script
1个回答
0
投票

问题:
  • 在循环外修改i

© www.soinside.com 2019 - 2024. All rights reserved.