te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Issue with getLastRow() - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Issue with getLastRow() - Stack Overflow

programmeradmin3浏览0评论

I have an issue with getLastRow(). I thought this function is supposed to return the last row that has data. But since the worksheet that I am working on has a lot more vacant rows below the rows filled with data, the functions seems to go in and select the last vacant row on its execution instead of selecting the last row which has data, which may not be the same. Can some one tell me how to fix this anomaly. Is this a google script bug or am I not clearly understanding what to do? Please ask further questions if I didn't make myself clear.

I have an issue with getLastRow(). I thought this function is supposed to return the last row that has data. But since the worksheet that I am working on has a lot more vacant rows below the rows filled with data, the functions seems to go in and select the last vacant row on its execution instead of selecting the last row which has data, which may not be the same. Can some one tell me how to fix this anomaly. Is this a google script bug or am I not clearly understanding what to do? Please ask further questions if I didn't make myself clear.

Share Improve this question edited Nov 26, 2018 at 2:29 Wicket 38.3k9 gold badges77 silver badges192 bronze badges asked Jun 4, 2012 at 19:56 Rijo SimonRijo Simon 7873 gold badges15 silver badges36 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 11

Do you have any "whole-column" formulae in the sheet? Either array formulae, or formulae that are copied all the way down? Even if these formulae are designed to return blank cells down the bottom, getLastRow() will still catch them.

If this is the case, try:

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
}

Here is another version of the currently selected answer. This swaps out the inner loop for an array join with no spaces between items. This joins all characters on the row. If there is a character in any position it will kick out similar to the current answer.

I did some speed tests, and while I thought the chosen answer might be faster, for some reason this seems to process faster based on my tests. I believe I found this concept a few years ago here on stack overflow, but not seeing that reference now.

function getLastPopulatedRow(sheetX) {
  var arrVals = sheetX.getDataRange().getValues();
  for (var i = arrVals.length-1; i > 0; i--) {
    if (arrVals[i].join('')){
      return i+1
    }
  }
  return 0; 
}

A simpler way is

var lastRow = sheet.getDataRange().getValues().length ;

while Adams solution will work with some tweaking, I have e across another solution to this issue with some searching. I saw a code that was supposed to find the first empty row, and I figured that I could simply return the row behind the first empty row to get the last populated row. I am attaching the code here:

function getLastPopulatedRow(sheet) {
  var cell = sheet.getRange('a1');
  var ct = 0;
  while ( cell.offset(ct, 0).getValue() != "" ) {
    ct++;
  }
  return (ct--);
}
发布评论

评论列表(0)

  1. 暂无评论