Określanie ostatniego wiersza w jednej kolumnie
Mam arkusz z danymi w kolumnach A
do H
.
Muszę określić ostatni wiersz w kolumnie A
, który zawiera dane (Wszystkie sąsiadują ze sobą - brak luk w danych/wierszach).
W innych kolumnach są również dane, które mają więcej wierszy danych niż kolumna A
, więc muszę wyizolować tylko kolumnę A
. (I/lub tylko zakres w obrębie col A
).
Mogę to zrobić na poziomie arkusza kalkulacyjnego używając
=COUNTA(A2:A100)
Jednak we wszystkich moich poszukując rozwiązania skryptowego Google Apps, jedyne, co wydaje mi się znaleźć, to wymagania dotyczące wykonywania wielu funkcji obejmujących dziesiątki linii kodu - w tym mnóstwo rzeczy {8]}... Co mógłbym zrobić mniej skomplikowanie poprzez offsetowanie bezpośrednio z A1
.
Czy istnieje jakiś specyficzny dla kolumny sposób modyfikacji tej metody?
var aLast = ss.getDataRange().getNumRows();
Jeśli proces zawiły jest tym, co jest wymagane, to niech tak będzie. Ale trudno mi to sobie wyobrazić (a jeszcze trudniej znaleźć!) prostszy rozwiązanie.
Czy ktoś chce mnie oświecić (lub pop my bubble)?
9 answers
Jak o użyciu sztuczki JavaScript?
var Avals = ss.getRange("A1:A").getValues();
var Alast = Avals.filter(String).length;
Zapożyczyłem ten pomysł z tej odpowiedzi . Na Array.filter()
metoda działa na tablicy Avals
, która zawiera wszystkie komórki w kolumnie A. filtrując na konstruktorze natywnej funkcji, otrzymujemy tylko elementy inne niż null.
To działa tylko dla jednej kolumny; jeśli zakres zawiera wiele kolumn, to wynik filter()
będzie zawierał komórki ze wszystkich kolumn, a zatem będzie poza wypełnionymi wymiarami zasięg.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-13 16:14:19
Chociaż nie ma prostej formuły, myślę o tym, że nie wymaga dziesiątek linii kodu, aby znaleźć ostatni wiersz w kolumnie A. wypróbuj tę prostą funkcję. Użyj go w komórce w normalny sposób, używając innej funkcji =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 ;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-14 12:14:24
Możesz to zrobić, idąc w odwrotną stronę. Zaczynając od ostatniego wiersza w arkuszu kalkulacyjnym i przechodząc w górę, aż otrzymasz jakąś wartość. Będzie to działać we wszystkich przypadkach, nawet jeśli masz kilka pustych wierszy pomiędzy. Kod wygląda następująco:
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 12:53:51
Przepisałem ponownie funkcje getLastRow/getLastColumn, aby określić indeks wiersza lub indeks kolumny.
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;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-04 03:07:04
Aby uzyskać liczbę kolumn lub indeks ostatniej kolumny:
var numColumns = sheet.getLastColumn()
Aby uzyskać numer wierszy lub indeks ostatniego wiersza:
var numRows = sheet.getLastRow()
Gdzie
var sheet = SpreadsheetApp.getActiveSheet()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-29 22:15:02
To może być inny sposób na obejście lastrow. Być może będziesz musiał pobawić się kodem, aby dopasować go do swoich potrzeb
function fill() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('a1').activate();
var lsr = spreadsheet.getLastRow();
lsr=lsr+1;
lsr="A1:A"+lsr;
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange(lsr), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-22 02:11:18
var Direction=SpreadsheetApp.Direction;
var aLast =ss.getRange("A"+(ss.getLastRow()+1)).getNextDataCell(Direction.UP).getRow();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-23 07:12:48
Oto alternatywny sposób rozwiązania tego problemu. Używa pętli while
, ale bierze pod uwagę puste odstępy między wierszami.
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 09:30:26
Używam getDataRange()
po którym następuje getNumRows()
. Pierwsza funkcja
Zwraca zakres odpowiadający wymiarom, w których dane są obecne
I druga funkcja
Zwraca liczbę wierszy w tym zakresie.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getActiveSheet();
var lastRow = ws.getDataRange().getNumRows();
P. S mam nadzieję, że to zadziała we wszystkich przypadkach.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 07:16:22