2013-07-13 23 views
27

Ho un foglio con i dati in cols A tramite H.Determinazione dell'ultima riga in una singola colonna

Devo determinare l'ultima riga nella colonna A che contiene dati (è tutto contiguo, senza spazi vuoti nei dati/righe).

C'è anche dati nelle altre colonne che hanno più righe di dati di colonna A, quindi ho bisogno di isolare unica colonna A. (E/o solo un intervallo entro col A).

posso fare questo a livello di foglio di calcolo utilizzando

=COUNTA(A2:A100) 

Tuttavia, in tutta la mia ricerche per una soluzione Google Apps Script, tutto quello che sembrano trovare sono i requisiti per svolgere molteplici funzioni che comprende decine di righe di codice - Compreso un sacco di roba i++ ... Che avrei potuto fare in modo meno complesso tramite compensazione direttamente da A1.

C'è forse un modo specifico per la colonna di modificare questo metodo?

var aLast = ss.getDataRange().getNumRows(); 

Se un processo complicato è ciò che è richiesto, allora così sia. Ma trovo difficile immaginare (e ancora più difficile da trovare!) Una soluzione più semplice.

Qualcuno si preoccupa di illuminarmi (o schioccare la mia bolla)?

risposta

63

ne dite di usare un trucco JavaScript?

var Avals = ss.getRange("A1:A").getValues(); 
var Alast = Avals.filter(String).length; 

Ho preso in prestito questa idea da this answer. Il metodo Array.filter() è operativo sull'array Avals, che contiene tutte le celle nella colonna A. Mediante il filtro sul costruttore di una funzione nativa, vengono restituiti solo elementi non nulli.

Questo funziona solo per una singola colonna; se l'intervallo contiene più colonne, il risultato di filter() includerà le celle di tutte le colonne e quindi non rientrerà nelle dimensioni popolate dell'intervallo.

+4

Molto furbo. Attendo con ansia il giorno in cui comprenderò javascript abbastanza bene da pensare in modo così creativo. Tutto a tempo debito, suppongo. Comunque nel frattempo, mi è piaciuto vedere come pensi. E complimenti a te per aver citato l'ispirazione per la tua soluzione. Classy. Grazie ancora. – 5th4x4

+1

Qualcosa da sottolineare che è quasi certamente ovvio per i programmatori più esperti è che l'intervallo non può estendersi più di una singola colonna. Questo è stato qualcosa che non ho ottenuto, ma Mogsdad ha sottolineato questo in un commento (che è stato cancellato) che non può estendersi più di una singola colonna. Ancora una volta, voglio solo metterlo qui per quelli che sono al mio livello di esperienza e ancora avendo problemi ad afferrare alcuni concetti. Grazie, Mogsdad. – Soundfx4

+0

questo è quello di cui avevo bisogno, grazie! – Jordan

7

Anche se non esiste una formula straighforward, posso pensare, non richiede decine di righe di codice per trovare l'ultima riga nella colonna A. Prova questa semplice funzione. Usalo in una cella modo normale devi usare qualche altra funzione =CountColA()

function CountColA(){ 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var data = sheet.getDataRange().getValues(); 
    for(var i = data.length-1 ; i >=0 ; i--){ 
    if (data[i][0] != null && data[i][0] != ''){ 
     return i+1 ; 
    } 
    } 
} 
+0

i rendimenti sopra l'ultima riga di tutto il foglio di lavoro, non col A. Ho bisogno solo l'ultima fila di Col A, sotto forma di una variabile per l'uso all'interno dello script stesso. Dal momento che non esiste una pillola magica per questo, credo che farò un loop down dalla A1 fino a quando non avrò colpito una paydirt (vuota). Grazie comunque. – 5th4x4

+1

Mi dispiace, è stato un piccolo errore dalla mia fine. Si prega di consultare lo script corretto. – Srik

0

Basta usare questo:

// Per ottenere il no di colonne o l'indice di ultima colonna

var = numColonne sheet.getLastColumn()

// Per ottenere il no delle righe o dell'indice dell'ultima riga

var numRows = foglio.getLastRow()

dove,

var foglio = SpreadsheetApp.getActiveSheet()

+2

questo guarda l'intero foglio, comprese le celle vuote, che non suona come è ciò che l'OP vuole. –

0

ho riscritto le getLastRow/getLastColumn funzioni secondo un indice di riga o indice di colonna.

function get_used_rows(sheet, column_index){ 
     for (var r = sheet.getLastRow(); r--; r > 0) { 
     if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(r, column_index).getValue() != ""){ 
      return r; 
      break; 
     } 
     } 
    } 

function get_used_cols(sheet, row_index){ 
    for (var c = sheet.getLastColumn(); c--; c > 0) { 
    if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(row_index, c).getValue() != ""){ 
     return c; 
     break; 
    } 
    } 
} 
3

È possibile farlo andando al contrario. Partendo dall'ultima riga del foglio di calcolo e salendo fino ad ottenere un certo valore. Ciò funzionerà in tutti i casi anche se nel frattempo ci sono alcune righe vuote. codice appare come di seguito:

var iLastRowWithData = lastValue('A'); 
function lastValue(column) { 
    var iLastRow = SpreadsheetApp.getActiveSheet().getMaxRows(); 
    var aValues = SpreadsheetApp.getActiveSheet().getRange(column + "2:" + column + lastRow).getValues(); 

    for (; aValues[iLastRow - 1] == "" && iLastRow > 0; iLastRow--) {} 
    return iLastRow; 
} 
Problemi correlati