Emiteți cu getLastRow ()

Am o problemă cu getLastRow (). Am crezut că această funcție ar trebui să returneze ultimul rând care are date. Dar, deoarece foaia de lucru pe care am lucrat are mai multe rânduri libere sub rândurile pline de date, funcțiile par a intra și selectează ultimul rând vacant pe execuția sa, în loc să aleagă ultimul rând care are date, care nu pot fi la fel. Poate cineva să-mi spună cum să rezolv această anomalie. Este un bug Google script sau nu înțeleg clar ce să fac? Adresați-vă întrebări suplimentare dacă nu m-am clarificat.

0

3 răspunsuri

în timp ce soluția Adams va funcționa cu unele modificări, am întâlnit o altă soluție la această problemă cu câteva căutări. Am văzut un cod care ar fi trebuit să găsească primul rând gol și m-am gândit că aș putea să întorc pur și simplu rândul din spatele primului rând gol pentru a obține ultimul rând populat. Am atașat codul aici:

function getLastPopulatedRow(sheet) {
  var cell = sheet.getRange('a1');
  var ct = 0;
  while ( cell.offset(ct, 0).getValue() != "" ) {
    ct++;
  }
  return (ct--);
}
0
adăugat
Acest lucru a implicat iterații mult mai puțin de buclă și, de asemenea, evită looping-ul imbricat, deci cred că se presupune că este mai rapid decât soluția anterioară.
adăugat autor Rijo Simon, sursa
Da, Adam ești ritul pentru asta. Probabil că ar trebui să lucrez la ea mai mult. Mulțumiri
adăugat autor Rijo Simon, sursa
Probabil că pot avea datele din intervalul relevant într-un var (ca și cum am făcut-o) și apoi să îl folosesc în acea condiție.
adăugat autor Rijo Simon, sursa
Da, dar nu arata altundeva decat coloana A. Solutia lui Adam scana intreaga foaie. Nu există minuni în scripturi ;-)
adăugat autor Serge insas, sursa
De asemenea, mă întreb despre performanța cu această metodă de iterație - pot fi numite multe getValues ​​() .
adăugat autor AdamL, sursa
Am redus numărul de linii din soluția lui Adam deasupra aceleiași ca și aceasta. De asemenea, rețineți că aceste soluții implică numeroase apeluri API, în timp ce Adam implică doar 1.
adăugat autor interestinglythere, sursa

O cale mai simplă este

var lastRow = sheet.getDataRange().getValues().length ;
0
adăugat
Prin crearea unei ArrayFormula în coloana B, populați întreaga coloană B (deși necompletată). Deci, getDataRange() va determina acest factor și vă va da numărul de rânduri.
adăugat autor Srik, sursa
Scri, dacă intru într-un A1 al unei foi goale: = ArrayFormula (IF (ROW (B: B) <11; , încă mai primesc numărul total de rânduri din foaie cu metoda dvs.
adăugat autor AdamL, sursa

Aveți formule "întregi coloane" în foaie? Fie formule de matrice, fie formule care sunt copiate până la capăt? Chiar dacă aceste formule sunt proiectate să returneze celule goale în partea inferioară, getLastRow() le va prinde încă.

Dacă este cazul, încercați:

function getLastPopulatedRow(sheet) {
  var data = sheet.getDataRange().getValues();
  for (var i = data.length-1; i > 0; i--) {
    for (var j = 0; j < data[0].length; j++) {
      if (data[i][j]) return i+1;
    }
  }
  return 0;//or 1 depending on your needs
}
0
adăugat
Ei bine m-am gândit că atunci când fac sheet.getLastRow (), de fapt, apucă ultimul rând al foii de calcul, chiar dacă este nepopulat. Ceea ce vreau să fac aici este obținerea ultimului "rând populat" al foii de calcul. Acum aș putea seta intervalul activ la secțiunea populată a foii de calcul. Dar din moment ce foaia de lucru va fi populată din când în când, va trebui să determin dinamic această gamă populată. Deci, ce trebuie să fac pentru a determina dinamic ultimul rând populat dintr-o foaie de lucru.
adăugat autor Rijo Simon, sursa
Îmi pare rău că nu voi marca încă acest comentariu al tău ca răspuns.
adăugat autor Rijo Simon, sursa
Cazul cu formule care sunt copiate până la capăt, este cazul meu. Îl pun aici pentru referință ulterioară.
adăugat autor Rijo Simon, sursa
<< Nu voi marca încă acest comentariu al tău ca răspuns >> Haha nici o problemă. Din comentariul dvs., eu cred că este cazul că ați putea avea formule până la capăt. În acest caz încercați funcția în răspunsul editat.
adăugat autor AdamL, sursa
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com