У меня есть небольшая функция в скрипте приложения 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]