Domanda

Nei fogli di Google ho un foglio con risposte del modulo, e al diritto delle colonne del modulo ho colonne con le formule che utilizzano i dati del modulo per le funzioni.

All'inizio avevo le formule si estendevano lungo le righe, così hanno lavorato su nuove sottomissioni del modulo, ma ha scoperto che le nuove inserzioni del modulo cancellano la fila fuori: (.

Invece di estendere manualmente le formule in basso dopo ogni sottomissione installata script copyDown() di Andrew Stillman ; Ciò che fa è copia le formule dopo la presentazione delle script.

Ora il problema che sto avendo è che lo script funziona quando viene eseguito manualmente, ma quando ho impostato il trigger sul modulo, inviare copia la suddetta formula su quel foglio e su tutti gli altri fogli nel foglio di calcolo. Non voglio quell'effetto collaterale, come incasinare l'intero foglio di calcolo. : ((

Quello che pensavo di fare è modificare lo script in modo da funzionare solo sul foglio di risposta del modulo, non tutti i fogli. Ma non so come farlo.

Il nome del foglio che voglio eseguire è "Richieste" e il gid=8.

Come posso modificare questo script per funzionare solo per quel foglio?

È stato utile?

Soluzione

Per ottenere il codice per eseguire solo un particolare foglio utilizzare il metodo .GetSheetbyName ().Ad esempio:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var reqSh = ss.getSheetByName('Requests');
.

C'è un altro modo che potrebbe essere più facile.È possibile provare a mantenere un foglio esclusivamente per le inserzioni del modulo e utilizzare un arrayformula in un secondo foglio per copiare eventuali valori dal primo foglio alla stessa portata del secondo.

= arrayformula ('richieste'! A1: h) copiare le colonne da A a H.

Ho avuto lo stesso problema di te e questa era la soluzione.Ho messo le mie formule nel secondo foglio nelle colonne a destra del range e li copiavano nel modo normale.Le formule si riferiscono all'intervallo copiato nel secondo foglio.Ha lavorato un piacere.

Non ho vomitato l'idea di me stesso - sono sicuro che è stato suggerito da qualcuno sul forum del foglio di calcolo di Google.Dovrei darti un link al post ma ho appena guardato e non riesco a trovarlo.

Altri suggerimenti

Nel tuo codice hai (commenti in codice)

 var sheets = ss.getSheets() [8]; // you choose sheet [8]
 var cellAddresses = new Object();
  for (var i=0; i<sheets.length; i++) { // but you enter a for loop that adresses every sheet in turn...
    var range = sheets[i].getDataRange();
.

Dovresti semplicemente sopprimere questo ciclo e utilizzare solo il numero del foglio che vuoi procedere ...

Il modo più semplice potrebbe essere quello di farlo come questo:

 var i = 8
 var sheets = ss.getSheets() [i];
 var cellAddresses = new Object();
    var range = sheets[i].getDataRange();
  ...
.

E alla fine del loop cancella il} che ha montato il ciclo for

Modifica : il nuovo codice dovrebbe essere così:

function copydown() {
  setCopyDownUid();
  setCopyDownSid();
  logCopyDown();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets() [8];
  var cellAddresses = new Object();
  var i=8
//  for (var i=0; i<sheets.length; i++) {
    var range = sheets[i].getDataRange();
    var lastRow = range.getLastRow();
    var values = range.getValues();
    for (var j=0; j<values.length; j++) {
      for (var k=0; k<values[j].length; k++) {
        var test = values[j][k].toString();
        var start = test.indexOf("copydown");
          if (start == 0) {
            start = start+10;
            var end = test.length-2;
            var length = end-start;
            var value = test.substr(start, length);
            var col = k+1;
            var nextRow = j+2;
            var numRows = lastRow-(nextRow-1);
            if (numRows>0) {
              var destRange = sheets[i].getRange(nextRow, col, numRows, 1);
              destRange.clear();
              var newLastRow = sheets[i].getDataRange().getLastRow();
              var newNumRows = newLastRow-(nextRow-1);
              var newDestRange = sheets[i].getRange(nextRow, col, newNumRows, 1);
              var cell = sheets[i].getRange(nextRow-1, col);
              cell.setFormula(value);
              cell.copyTo(newDestRange);
            }
            var cellAddress = cell.getA1Notation();
            cellAddresses[cellAddress] = test;
          }
      }
    }
    Utilities.sleep(500);
    resetCellValues(cellAddresses, sheets[i]);
  }
//}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top