You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:36:03