我想自动滚动到给定行号后的第一行,该行号的 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 行是空的,但是工作表在加载时不滚动
试试这个,而不是内置的
.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
更好。
您可以使用下面附带的
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;
}
• 由于 AsyncTask onPostExecute() 中的 notifyItemRangeInserted(),加载 onScrollChange() 不起作用
• 关于在每个用户滚动上提供不同动画的反应解决方案的一般建议
• 什么时候 Request.Form["name"] 为空,什么时候为空字符串?
• 是否有任何 excel 公式可以查找单元格的值是否在另一张工作表的列中?
• RecyclerView SnapHelper 无法显示第一个/最后一个项目
• 有没有办法以编程方式执行某些操作,例如使用水平滚动滚动到 CSS 网格上的特定点?