Google Sheets API自定义菜单开发中getRange返回数组过滤失败问题
问题根因
data.data.values返回的是二维数组结构:
- 外层数组的每一项对应表格的一行数据
- 内层数组的每一项对应当前行某一列的单元格值
你现有的过滤逻辑是直接将整行的数组对象和字符串'09/16'做全等判断,数据类型和内容都不可能匹配,所以永远返回空数组。
修复方案
你需要取每行的第一列(日期列,对应数组索引为0)的值和目标日期对比,同时建议先移除表头行避免干扰,修改后的代码如下:
const {google} = require('googleapis'); const keys = require('./key.json'); const client = new google.auth.JWT( keys.client_email, null, keys.private_key, ['https://www.googleapis.com/auth/spreadsheets'] ); async function gsrun(cl, targetDate = '09/16'){ const gsapi = google.sheets({version:'v4', auth: cl}); const opt = { spreadsheetId: 'XXXXXXXX', range: 'Data!A1:G' }; let data = await gsapi.spreadsheets.values.get(opt); let dataArray = data.data.values; // slice(1)移除表头行,过滤条件取每行第0位(日期列)匹配目标值 let newArray = dataArray.slice(1).filter(row => row[0] === targetDate); console.log(newArray); return newArray; };
后续对接datePicker的注意事项
- 前端datePicker返回的日期值需要先做格式转换,保持和表格内日期格式完全一致(如都是
MM/DD格式,不要带年份、不要出现09-16这类分隔符不同的情况) - 如果表格内的日期单元格是谷歌表格原生日期格式,API返回的会是日期序列号而非字符串,需要先将序列号转为
MM/DD格式的字符串再做对比,也可以直接把表格日期列的单元格格式修改为「纯文本」避免转换问题。
内容的提问来源于stack exchange,提问作者Marshall Hearn
相关产品推荐
相关产品推荐

