2015-04-15 12 views
5

Sto cercando di nascondere le righe se la colonna A è vuota. Voglio applicarlo a fogli specifici (Settimana1, Settimana2, Settimana3, Settimana4 e Settimana5). Questo è il codice che ho finora per Week1.Nascondi righe nel foglio di calcolo di google se la colonna A è vuota?

function ConditionalHideRow() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Week1"); 
    var condition = sheet.getRange("A:A").getValue(); 
    if (condition = "EMPTY") { 
    sheet.hideRows(1,125) 
    }  

MODIFICA: domanda bonus, c'è un modo per visualizzarlo quando la colonna A è piena? Sto utilizzando una formula di query = per compilare il foglio di lavoro e la lunghezza dovrà essere modificata con l'aggiunta di altri dati.

+0

se una risposta di seguito ha funzionato per te, potresti prendere in considerazione di contrassegnare la risposta in modo che il resto di noi lo sappia. – ScampMichael

+0

la tua domanda bonus mi porta a credere che tutte le file che stai nascondendo siano sotto l'ultima riga occupata. è corretto? stai nascondendo le righe che sono sparpagliate all'interno dei dati o solo alla fine dopo l'ultimo dei dati? – ScampMichael

+0

Nascondo le righe che si intersecano all'interno dei dati. Il mio datore di lavoro voleva che io creassi un foglio di calcolo in cui poteva vedere sia le entrate che le spese di settimana in settimana, ma non ho modo di indovinare quanto potrebbe essere lunga la sezione delle entrate, quindi ho aggiunto altre righe vuote per compensare.Usando la formula di JPV sono stato in grado di nascondere le righe vuote ma diventa un dolore quando non riesco a mostrare quelle stesse file (con la stessa efficienza) una volta che qualcosa viene aggiunto a loro (sto usando una query importrange => per generare dati). – Darksun

risposta

4

Suppongo che "EMPTY" non sia realmente la stringa che si trova in col A e si desidera verificare se il col A è veramente vuoto? In tal caso, provare:

function hideRows() { 
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(s) 
    sheet.getRange('A:A') 
     .getValues() 
     .forEach(function (r, i) { 
      if (!r[0]) sheet.hideRows(i + 1) 
     }); 
    }); 
} 

Oppure, per un approccio più 'classica':

function hideRows2() { 
var sheets = ["Week1", "Week2", "Week3", "Week4", "Week5"]; 
for (var i = 0, sLen = sheets.length; i < sLen; i++) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(sheets[i]) 
    var val = sheet.getRange('A:A') 
     .getValues(); 
    for (var j = 0, vLen = val.length; j < vLen; j++) { 
     if (!val[j][0]) sheet.hideRows(j + 1) 
     } 
    } 
} 

Assicurarsi di non si hanno troppe righe vuote (dopo l'ultima riga con i dati) come questo può portare a un time-out dell'esecuzione dello script.

+0

Ha funzionato, grazie! – Darksun

+0

l'approccio classico è più simile a quello che avrei scritto, ma ho sicuramente imparato qualcosa dal primo approccio. grazie JPV – ScampMichael

+0

@Darksun, lieto di sentire. Si prega di considerare 'accettando' la risposta ... – JPV

0

Risposta a Modificato: l'unico approccio per visualizzare le righe occupate che a questo punto avrebbe senso sarebbe di mostrare tutte le righe per il foglio prima di nascondere le righe vuote.

Aggiungere la riga sotto dove si dice // Aggiungere questo

function hideRows() { 
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(s) 
    sheet.unhide(sheet.getRange('A:A')) // Add this 
    sheet.getRange('A:A') 
     .getValues() 
     .forEach(function (r, i) { 
      if (!r[0]) sheet.hideRows(i + 1) 
     }); 
    }); 
} 

O Per scoprire tutto indipendente:

function unhideRows() { 
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(s) 
    sheet.unhide(sheet.getRange('A:A')) 
    }); 
} 

Per riferimento futuro, ci sono modi più efficaci di fare le cose quando si può gestire le righe contigue come un blocco anziché uno alla volta. Anche se questo funziona, credo che JPV avrebbe potuto farlo in modo un po 'diverso se avesse compreso il layout.

+0

che è davvero corretto. Non potevo avere "indovinato" il layout dalla domanda originale (ecco perché è sempre una buona idea condividere un foglio di calcolo di esempio). Ad ogni modo, buona cosa che eri in giro. :-) – JPV

+0

È come la consegna della pizza. Uno o due alla settimana, ordinarli singolarmente va bene. Avere una festa e averne 12, non li ordineresti uno alla volta, faresti una chiamata e ordinerai 12 per una consegna singola. – ScampMichael

5

Non hai bisogno di una formula per questo, si può utilizzare un filtro ...

  1. Evidenziare la colonna in questione
  2. Selezionare * Dati>Filtro
  3. Ora dovrebbe essere presente un pulsante a discesa nella riga dell'intestazione. Clic su di esso e selezionare/non-selezionare le condizioni

UPDATE: Questo dovrebbe funzionare anche per la tua domanda bonus pure. Una volta che la colonna viene popolata, non soddisfa più le condizioni del filtro se "(Blanks)" è deselezionato.

Problemi correlati