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

如何用JavaScript通过Sheet API获取Google Sheet单元格下拉列表全值?

获取Google Sheet单元格下拉列表所有选项的正确方法

你之前用的values端点确实只能拿到单元格的实际选中值,没办法获取下拉列表的完整选项——因为下拉列表属于表格的「数据验证规则」,不是单元格的内容,得用专门的接口来拿。

下面是具体的解决步骤:


1. 换用正确的API端点

要获取数据验证规则,你需要调用Spreadsheets.get接口,并且通过fields参数过滤返回结果,只拿到我们需要的验证信息(避免返回大量冗余数据)。

请求URL格式如下:

GET https://sheets.googleapis.com/v4/spreadsheets/{你的SheetID}?key={你的API密钥}&fields=sheets(properties(title),data(rowData(values(dataValidation))))

这里的fields参数指定了只返回Sheet的名称,以及每个单元格的数据验证规则,大大减少了返回的JSON体积。


2. 解析返回的JSON数据

返回的结构里,你需要先定位到目标Sheet(比如你的Sheet1),再找到对应单元格的dataValidation对象。下拉列表的选项分两种情况:

情况1:直接输入的固定选项(像你截图里的那种)

如果下拉选项是手动输入的列表,选项会存在dataValidation.condition.values里,每个选项的具体值在userEnteredValue.stringValue字段。

情况2:基于其他单元格范围的下拉

如果下拉选项是引用其他单元格的范围,会在dataValidation.condition.range里看到对应的范围信息,这时候你需要再调用一次values接口,获取该范围的所有单元格内容,就是下拉选项。


3. 示例AJAX代码

这里给你写个完整的示例,帮你快速上手:

const sheetId = "你的表格ID";
const apiKey = "你的API密钥";
const targetSheetName = "Sheet1";
// 假设目标单元格是A1,对应索引行0、列0(Google Sheets API索引从0开始)
const targetRow = 0;
const targetCol = 0;

fetch(`https://sheets.googleapis.com/v4/spreadsheets/${sheetId}?key=${apiKey}&fields=sheets(properties(title),data(rowData(values(dataValidation))))`)
  .then(res => res.json())
  .then(data => {
    // 找到目标Sheet
    const targetSheet = data.sheets.find(s => s.properties.title === targetSheetName);
    if (!targetSheet) {
      console.log("找不到目标Sheet,请检查名称是否正确");
      return;
    }

    // 定位到目标单元格的验证规则
    const cell = targetSheet.data[0].rowData[targetRow]?.values[targetCol];
    if (!cell?.dataValidation) {
      console.log("该单元格没有设置下拉列表");
      return;
    }

    const validation = cell.dataValidation;
    // 处理固定选项列表
    if (validation.condition.type === "ONE_OF_LIST") {
      const options = validation.condition.values.map(item => item.userEnteredValue.stringValue);
      console.log("下拉列表所有选项:", options);
    }
    // 处理基于范围的选项
    else if (validation.condition.type === "ONE_OF_RANGE") {
      const range = validation.condition.range;
      // 拼接范围的values请求URL,注意API里的行索引是从0开始,所以要+1转成Excel式的行号
      const rangeUrl = `https://sheets.googleapis.com/v4/spreadsheets/${sheetId}/values/${range.sheetId}!${range.startRowIndex + 1}:${range.endRowIndex}`;
      fetch(rangeUrl + `?key=${apiKey}`)
        .then(rangeRes => rangeRes.json())
        .then(rangeData => {
          const rangeOptions = rangeData.values.flat();
          console.log("基于范围的下拉选项:", rangeOptions);
        });
    }
  })
  .catch(err => console.error("请求出错:", err));

注意事项

  • 确保你的API密钥已经开启了Google Sheets API的权限,并且目标表格的共享设置允许该密钥访问(比如设置为「任何人有链接可查看」)。
  • 如果需要批量获取多个单元格的下拉选项,可以调整fields参数或者遍历rowData里的所有单元格。

内容的提问来源于stack exchange,提问作者Mushfiq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:33:52