Google Apps Script获取Items工作表指定列所有值失败求助
解决Google Apps Script获取整列所有值的问题
原代码问题分析
- 循环中找到第一个非空行就执行
return,直接终止函数,只能返回单个值而非所有列值 values.sort()放在循环内无意义,且会打乱原有数据顺序,还会对包含大量空值的数组排序lr = i + 1计算的是工作表行号,但values是从B2开始的数组,values[lr]会超出数组索引范围(数组索引从0开始)- 未声明变量
lr,属于全局变量,易引发意外问题 - 使用
getRange("Items!B2:B")会获取大量空行,效率低下
修正后的代码
function getAllItems() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const locationSheet = ss.getSheetByName("Items"); // 获取B列从第2行到最后一行的有效数据范围 const lastRow = locationSheet.getLastRow(); if (lastRow < 2) return []; // 若B2及以下无数据,返回空数组 const range = locationSheet.getRange(2, 2, lastRow - 1, 1); const values = range.getValues(); // 将二维数组转为一维数组,并过滤空值 const allItems = values .map(row => row[0]) .filter(item => item !== null && item !== ""); // 如需排序,取消下方注释(默认字符串排序,数字排序需传入比较函数) // allItems.sort(); // 数字排序示例:allItems.sort((a, b) => a - b); return allItems; }
代码说明
- 用
getLastRow()获取工作表最后一行,避免获取空行,提升运行效率 map(row => row[0])将getValues()返回的二维数组转为一维数组,简化数据处理filter方法筛选掉空值与null值,得到所有有效项- 增加了边界判断:若B2以下无数据,直接返回空数组,避免报错
内容的提问来源于stack exchange,提问作者Rain
相关产品推荐
相关产品推荐

