获取指定行最后一列列数:Google Apps Script函数返回null问题求助
排查并修复
lastcolinrow函数返回null的问题 你的函数返回null是因为逻辑存在两处关键错误,导致循环无法触发return语句,函数最终没有返回值(JS中无返回值的函数默认返回null)。下面详细分析并给出修复方案:
问题1:错误的数组过滤逻辑
getValues()返回的是二维数组(格式为[[单元格1值, 单元格2值, ..., 单元格20值]]),你直接对这个二维数组调用filter(String),会过滤整个行(而非行内的空值单元格),最终data仍然是包含整行数据的二维数组,后续循环判断空值的逻辑完全失效。
问题2:循环范围与判断条件不匹配
你的循环范围是i <= 20,但data[0]的长度是20(因为你取了20列),当i=20时data[0][20]是undefined(数组索引从0开始,最大索引是19),而你判断的是data[0][i] == '',undefined不等于空字符串,所以循环全程不会触发return,函数自然返回null。
修复后的代码(根据函数名lastcolinrow,假设你需要返回该行最后一个非空列的列号)
function lastcolinrow(row) { var tss = SpreadsheetApp.openById("1wtZDazZ5qxeuV65k7Cr-704Sbx-in6qDx-3JmjthTrM"); var sheet = tss.getSheetByName("Tickets2"); // 1. 获取指定行的一维数组(去掉外层二维包裹) var rowData = sheet.getRange(row, 1, 1, 20).getValues()[0]; // 2. 过滤掉该行的空值单元格,得到非空值的数组 var nonEmptyCells = rowData.filter(String); // 3. 非空数组的长度就是最后一个非空列的列号(因为从第1列开始) return nonEmptyCells.length; }
如果你实际需求是返回该行第一个空列的列号,可以用这个版本:
function lastcolinrow(row) { var tss = SpreadsheetApp.openById("1wtZDazZ5qxeuV65k7Cr-704Sbx-in6qDx-3JmjthTrM"); var sheet = tss.getSheetByName("Tickets2"); var rowData = sheet.getRange(row, 1, 1, 20).getValues()[0]; // 遍历每一列,找到第一个空值的位置 for(var i = 0 ; i < rowData.length ; i++){ if (rowData[i] === ''){ return i + 1 ; // 列号从1开始,所以索引+1 } } // 如果所有20列都非空,返回21(下一个空列的位置) return 21; }
内容的提问来源于stack exchange,提问作者Bala Murali
相关产品推荐
相关产品推荐

