Apps Script用getRangeList选择末尾行可变的不连续数据区域
方案1问题与修正
- 错误原因:
getRangeList()的入参要求是由范围字符串组成的数组,你传入的是数字数组,这是getRange()的参数格式,两者不通用。如果要使用R1C1格式传参,需要先把范围拼接为R[行号]C[列号]:R[行号]C[列号]格式的字符串,再放入数组中传入。 - 修正代码:
var app = SpreadsheetApp; var activeSheet = app.getActiveSpreadsheet(); var sheetRentRoll = activeSheet.getSheetByName('Rent Roll'); var sheetUnitsDB = activeSheet.getSheetByName('UnitsDB'); var LastUnitRow = sheetUnitsDB.getLastRow(); // 拼接R1C1格式的范围字符串,再放入数组传入 var r1c1Range = `R5C3:R${LastUnitRow}C3`; var testrange = sheetUnitsDB.getRangeList([r1c1Range]); Logger.log(testrange)
方案2问题与修正
- 错误原因:你手动把数组拼接成了字符串类型,
getRangeList()要求入参是真实的数组类型,不是格式看起来像数组的字符串,所以触发了参数签名不匹配的报错。不需要手动拼接引号和方括号,直接把得到的A1格式字符串放入数组传入即可。 - 修正代码:
var app = SpreadsheetApp; var activeSheet = app.getActiveSpreadsheet(); var sheetRentRoll = activeSheet.getSheetByName('Rent Roll'); var sheetUnitsDB = activeSheet.getSheetByName('UnitsDB'); var LastUnitRow = sheetUnitsDB.getLastRow(); var rangeR1 = sheetRentRoll.getRange(5,3,LastUnitRow-4,1); var rangeA1 = rangeR1.getA1Notation(); // 直接传入真实数组,删除之前拼接字符串的代码 var testrange = sheetUnitsDB.getRangeList([rangeA1]); Logger.log(testrange)
补充说明
如果你只需要选择C5:C10这一个连续范围,完全不需要用getRangeList,直接调用getRange(5,3,LastUnitRow-4,1)即可实现需求,性能更优。getRangeList仅用于需要同时选择多个不连续范围的场景。
内容的提问来源于stack exchange,提问作者Kim Hopkins
相关产品推荐
相关产品推荐

