google-apps-script google - Determinare l'ultima riga in una singola colonna




5 Answers

Che ne dici 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 questa risposta . Il metodo Array.filter() funziona sull'array Avals , che contiene tutte le celle nella colonna A. Filtrando sul costruttore di una funzione nativa, si ottengono solo elementi non nulli.

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 sarà al di fuori delle dimensioni popolate dell'intervallo.

spreadsheet tutorial

Ho un foglio con i dati in colonne da A a H

Ho bisogno di determinare l'ultima riga nella colonna A che contiene i dati (è tutto contiguo, senza spazi nei dati / righe).

Vi sono anche dati nelle altre colonne che hanno più righe di dati rispetto alla colonna A , quindi devo isolare solo la colonna A (E / o solo un intervallo all'interno della colonna A ).

Posso farlo a livello di foglio di calcolo usando

=COUNTA(A2:A100)

Tuttavia, in tutte le mie ricerche per una soluzione di Google Apps Script, tutto quello che mi sembra di trovare sono i requisiti per eseguire più funzioni che comprendono decine di linee di codice - incluso un sacco di roba i++ ... Che potrei 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 contorto è 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)?




Puoi farlo andando nella direzione opposta. A partire dall'ultima riga nel foglio di calcolo e salendo fino a ottenere un certo valore. Ciò funzionerà in tutti i casi anche se nel frattempo ci sono alcune righe vuote. Il codice si presenta 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;
}



Ho riscritto le funzioni getLastRow / getLastColumn per specificare un indice di riga o un 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;
    }
  }
}



Ecco un modo alternativo per risolvere questo. Utilizza un ciclo while ma prende in considerazione gli spazi vuoti tra le righe.

function getLastRow (column) {
  var iLastRow = ss.getActiveSheet().getMaxRows();
  var aValues = ss.getActiveSheet().getRange(column + ":" + column).getValues();
  var row = "";
  while(row == ""){
    row = aValues[iLastRow-1];
    iLastRow--;
  }
  return iLastRow;
}



Per ottenere il numero di colonne o l'indice della colonna precedente:

var numColumns = sheet.getLastColumn()

Per ottenere il numero di righe o l'ultimo indice della riga:

var numRows = sheet.getLastRow()

dove

var sheet = SpreadsheetApp.getActiveSheet()



Related

google-apps-script google-spreadsheet