Google Apps Script中getLastRow()返回值为最后一行+2的问题求助
问题原因及解决方法
你的问题出在对getRange(row, column, numRows, numColumns)方法的参数理解错误:
- 第三个参数
numRows是要选取的行数,而非结束行号 - 你直接传入
originSheet.getLastRow(),它返回的是表格中最后一个有数据(或格式)的行的行号,导致选取的行数远大于实际需要的范围
举个例子:假设你的表格最后一行有数据的是第8行,getLastRow()返回8,那你的代码会从第4行开始选取8行,最终范围是第4行到第11行(4+8-1),这就会出现你说的“比实际最后一行多2行”的情况。
修正后的代码
function myFunction() { var originSpreadSheet = SpreadsheetApp.getActive(); var originSheet = originSpreadSheet.getSheetByName("Sheet1"); var lastRow = originSheet.getLastRow(); // 计算从第4行到最后一行的行数,若最后行小于4则取0避免报错 var numRows = lastRow >= 4 ? lastRow - 4 + 1 : 0; if (numRows > 0) { var datos = originSheet.getRange(4, 5, numRows, 4).setBackground('red'); console.log(datos.getA1Notation()); } else { console.log("第4行及以下无数据"); } }
额外说明
如果getLastRow()返回的行号比你认为的实际数据行大,可能是因为表格中某些行虽然没有内容,但设置了格式(比如背景色、边框),getLastRow()会将这类行视为“有内容”的行。你可以检查表格中是否存在这类隐藏的格式行,清理后getLastRow()会返回正确的实际数据最后一行行号。
内容的提问来源于stack exchange,提问作者Francisco Varela
相关产品推荐
相关产品推荐

