Google Apps Script:如何在getRange中使用A1表示法变量?报错找不到区间
解决Google Apps Script中getRange使用A1表示法变量报错的问题
问题原因分析
你遇到的「找不到区间」错误,核心问题出在传给getRange()的celda变量上——从错误日志里的["Celda"]能看出来,它不是你期望的纯字符串(比如"B71"),而是一个数组类型。
这是因为getValues()返回的是二维数组,每一行数据都是一个子数组。如果你的表单响应中第15列(对应代码里的columna[14],数组索引从0开始)的单元格值本身是数组(比如这个表单字段是多选类型,或者单元格用了数组公式返回结果),那columna[14]拿到的就会是数组,而不是单个A1格式的字符串。当getRange()接收数组参数时,它会把数组解析成「行、列、行数、列数」的参数组合,自然找不到对应的区间。
解决方案
我们需要确保传给getRange()的是纯字符串类型的A1表示法,同时加上空值判断避免意外错误:
- 先提取数组中的字符串值(如果
columna[14]是数组); - 验证值是否为有效的A1格式字符串,再执行赋值操作。
修改后的代码
function reservar() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var form = ss.getSheetByName("Respuestas de formulario 1"); var ss_calendario = SpreadsheetApp.openById('1r0jLPIfOAmOD7Lim9qmscQsrx5GAworz6ug1O-XAHDg'); var calendario = ss_calendario.getSheetByName("Disponibilidad"); var rango = form.getRange(1,1,form.getLastRow(),16); var data = rango.getValues(); for (var i = 0; i < data.length; ++i) { var columna = data[i]; var disponible = columna[9]; var celda = columna[14]; // 处理celda:如果是数组则取第一个元素,确保是字符串 if (Array.isArray(celda)) { celda = celda[0]; } // 加上空值和有效性判断,避免无效值导致报错 if(disponible == "Disponible" && celda && typeof celda === 'string'){ calendario.getRange(celda).setValue(true); } } }
额外提示
如果你的表单字段是多选类型,可能会有多个A1格式的值,这时你可以遍历celda数组,逐个设置单元格值;如果是其他情况导致columna[14]为数组,可以根据实际数据结构调整提取逻辑。
内容的提问来源于stack exchange,提问作者user4930964
相关产品推荐
相关产品推荐

