找到第一个空行并滚动到它,Lastrow 由于公式不工作

问题描述 投票:0回答:2

我想自动滚动到给定行号后的第一行,该行号的 A 列是空的,正在卸载工作表(此 Google 表格)

以下公式有效,但滚动到最后一个空行,因为我假设如果一行中有在单元格中添加空白的公式,则将它们计为非空

 function onOpen(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheetname = ss.getSheets()[0].getName();
 // Logger.log("DEBUG: sheetname = "+sheetname)
 var sheet = ss.getSheetByName(sheetname);
 var lastRow = sheet.getLastRow();
 var range = sheet.getRange(lastRow,1);
 sheet.setActiveRange(range);
}

所以我试过这样修改,但它没有向下滚动

function onOpen(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheetname = ss.getSheets()[0].getName();
 // Logger.log("DEBUG: sheetname = "+sheetname)
 var sheet = ss.getSheetByName(sheetname);
 var lastRow = sheet.getRange('A7:A').getLastRow() + 1;
 var range = sheet.getRange(lastRow,1);
 sheet.setActiveRange(range);
}

A 列在第 600 行是空的,但是工作表在加载时不滚动

google-apps-script google-sheets
2个回答
2
投票

试试这个,而不是内置的

.lastRow()
方法,

您可以改为使用

.findIndex()
.reverse()
.length
方法来查找列的最后一个非空行号。

function onOpen(){
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetname = ss.getSheets()[0].getName();
  // Logger.log("DEBUG: sheetname = "+sheetname)
  const sheet = ss.getSheetByName(sheetname);
  const values = sheet.getRange('A7:A').getValues();
  const lastRow = values.length - (values.reverse().findIndex(row => !!row[0]));
  const range = sheet.getRange(lastRow,1);
  sheet.setActiveRange(range);
}

但是,如果您正在寻找

the first empty row
,您可以考虑更改
lastRow
变量:

function onOpen(){
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetname = ss.getSheets()[0].getName();
  // Logger.log("DEBUG: sheetname = "+sheetname)
  const sheet = ss.getSheetByName(sheetname);
  const values = sheet.getRange('A7:A').getValues();
  // const lastRow = values.length - (values.reverse().findIndex(row => !!row[0]));
    const firstEmptyRow = values.findIndex(row => !row[0]) + 1;
  // const range = sheet.getRange(lastRow,1);
    const range = sheet.getRange(firstEmptyRow,1);
  sheet.setActiveRange(range);
}

顺便说一下,尽可能使用

const
声明变量,如果不能,则使用
let
声明变量,这比在 JavaScript 中使用
var
更好。


1
投票

您可以使用下面附带的

getLastRow_()
实用功能找到最后一行具有可见内容的行。像这样使用它:

  const lastRow = getLastRow_(sheet, 1);
  const range = sheet.getRange(lastRow + 1, 1);
  sheet.setActiveRange(range);

您需要将功能代码粘贴到您的脚本项目中:

/**
* Gets the position of the last row that has visible content in a column of the sheet.
* When column is undefined, returns the last row that has visible content in any column.
*
* @param {SpreadsheetApp.Sheet} sheet Optional. A sheet in a spreadsheet. Defaults to the active sheet.
* @param {SpreadsheetApp.Range} column Optional. The 1-indexed position of a column in the sheet, or a SpreadsheetApp.Range object that covers the columns where to find the last row with visible content, or an A1 type text string such as 'A:A' or 'A:B'.
* @return {Number} The 1-indexed row number of the last row that has visible content.
*/
function getLastRow_(sheet = SpreadsheetApp.getActiveSheet(), column) {
  // version 1.6, written by --Hyde, 18 March 2023
  const values = (
    typeof column === 'number'
      ? sheet.getRange(1, column, sheet.getLastRow() || 1, 1)
      : typeof column === 'string'
        ? sheet.getRange(column)
        : column
          ? sheet.getRange(1, column.getColumn(), sheet.getLastRow(), column.getWidth())
          : sheet.getDataRange()
  ).getDisplayValues();
  let row = values.length - 1;
  while (row && !values[row].join('')) row--;
  return row + 1;
}
© www.soinside.com 2019 - 2024. All rights reserved.