+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 2 su 2

Efficientamento macro per Google Apps Script

  1. #1
    Sgrubak non è in linea Scribacchino
    Buongiorno a tutti!

    Chiedo aiuto per un fastidio (perché non è un vero e proprio problema) che mi affligge.
    Sto cercando di aggiornare dinamicamente gli elenchi per le validazioni dei dati nelle celle in Google Fogli e purtroppo, pur ottenendo il risultato sperato, mi ritrovo ad affrontare un problema di tempi di esecuzione che poco mi garba.

    Premettendo che il codice in questione è questo:
    /** @OnlyCurrentDoc */
    
    function AggiornamentoSelezioni() {
      //Costruisco la stringa per la validazione
      var args = new Array();
      var shSituazione = SpreadsheetApp.getActive().getSheetByName('Situazione');
      var valoriLuoghi = shSituazione.getRange(2,1,1000 ,3).getValues();
      for(i=0;i<1000;i++){
        //Ciclo re righe del range: se il valore della seconda colonna è strettamente maggiore della terza, aggiungo all'array la prima colonna.
        if(valoriLuoghi[i][0].toString() != ''){
          if(valoriLuoghi[i][1]>valoriLuoghi[i][2]){
            args.push(valoriLuoghi[i][0].toString());
          }
        }
        else {
          //Se trovo una cella vuota, esco dal ciclo per non scorrere tutte e 1000 le righe
          break;
        }
      }
      //Imposto la validazione
      var shScelte = SpreadsheetApp.getActive().getSheetByName('Scelte');
      var celle = shScelte.getRange(2,2,100,1);
      var valoriCelle = celle.getValues();
      var regole = celle.getDataValidations();
      var fine = false;
      var pushed = false;
      //Qui ciclo le varie DataValidations. Ho seguito quanto riportato dalla guida ufficiale
      for(var j = 0; j < regole.length; j++){
        for(var k = 0; k < regole[j].length; k++){
          var regola = regole[j][k];
          if(regola != null){
            if(valoriCelle[j][0] != ''){
              args.push(valoriCelle[j][0].toString());
              pushed = true;
            }
            regole[j][k] = regola.copy().withCriteria(regola.getCriteriaType(), [args, true]).build();
            if(pushed){
              args.pop();
              pushed = false;
            }
          } else {
            fine = true;
            break;
          }
        }
        if(fine) break;
      }
      celle.setDataValidations(regole);
      Browser.msgBox('File pronto per la modifica!');
    };
    
    La logica è piuttosto semplice:
    -Verifico che nel primo foglio vi siano ancora posti disponibili. Se si, aumento i valori disponibili per l'array;
    - Imposto l'array precedentemente calcolato come lista di valori per la tendina della validazione dati. se è già presente un valore nella cella, aggiungo anche quello all'array e poi lo tolgo subito dopo.

    Ho già sfruttato i suggerimenti che da Google per le Best Practices ed effettivamente la miglioria si è vista parecchio. Inizialmente avevo affrontato il problema "alla VBA di Excel", ma qui leggere le singole celle una per volta è un bagno di sangue in termini prestazionali.

    Mi resta il dubbio che la mia "autodidatticità" mi porti a scrivere del codice inefficiente e quindi chiedo se qualcuno, a tempo perso, abbia voglia di spulciare lo script per vedere se ho commesso oscenità che mi percuotano questa zappa sui piedi. Altrimenti è il server di Google che fa cilecca, ma in quel caso mi metto l'anima in pace.

    Grazie in anticipo!

    P.S: Ho sfruttato questa sezione perché non sapevo dove altro metterlo...
    Ultima modifica di AntonioG; 25-02-2021 17:28 

  2. #2
    Sgrubak non è in linea Scribacchino
    Visto che la discussione è ferma da un po', ho provato a postare anche in un altro forum. Se dovessi trovare riscontro, riporterò il link della discussione e l'eventuale soluzione.

    Ciau!

    EDIT: Aggiungo link all'altra discussione.
    Ultima modifica di Sgrubak; 25-02-2021 17:47 

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Macro Excel per fare ricerche su Google
    Da olliver nel forum Microsoft Excel
    Risposte: 1
    Ultimo Post: 12-02-2013, 16:24
  2. Download foto contatti Google con Google API
    Da Verkus nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 20-01-2013, 19:09
  3. Google Map in VB6
    Da StegcO nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 12-11-2009, 18:04
  4. In italia è più usato Google.com o Google.it?
    Da ghisirds nel forum Altri linguaggi e strumenti
    Risposte: 0
    Ultimo Post: 06-08-2007, 23:34
  5. Google
    Da The Revolution nel forum Altri linguaggi e strumenti
    Risposte: 3
    Ultimo Post: 28-03-2007, 16:00