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

求助:将GraphQL价格数据导入Google Sheets并按列展示

解决GraphQL数据导入Google Sheets并按列展示的问题

你当前代码的核心问题有几个:

  • mae是解析后的JSON对象,不是数组,mae.length会返回undefined,导致循环根本执行不了
  • assetPair是嵌套对象,直接push(data[j])会把整个对象塞进单元格,而不是你需要的id值
  • 循环里反复调用appendRow效率很低,应该先收集所有数据再批量写入

以下是修正后的完整代码,附带关键注释:

function graphData(query, url) {
  var options = {
    "headers": {"Content-Type": "application/json"},
    "payload": JSON.stringify({query}),
    "method": "POST"
  };
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response);
  return response;
};

function Prices() {
  var ss = SpreadsheetApp.openById('1uEpj8gWdHJCVXN2fTgGBCzoi5ZOnkIq0leoGWDB1s-g'); 
  var sheet = ss.getSheetByName('Test'); 
  // 清空原有数据(可选,根据需求调整)
  // sheet.clearContents();
  
  var url = 'https://api.thegraph.com/subgraphs/name/openpredict/chainlink-prices-subgraph';
  // 注意:原查询里"DAI/ETH "多了个空格,可能导致匹配不到数据,已移除
  var query = 'query{prices(first:2 where:{assetPair_in:["USDC/ETH","DAI/ETH"]} orderBy:timestamp orderDirection:desc) {assetPair{id}timestamp price}}';
  
  var response = graphData(query, url);
  var jsonText = response.getContentText();
  var parsedData = JSON.parse(jsonText);
  
  // 确认数据结构:parsedData.data.prices是目标数组
  var pricesArray = parsedData.data.prices;
  if (!pricesArray || pricesArray.length === 0) {
    Logger.log("没有获取到数据");
    return;
  }
  
  // 准备表头和数据行
  var rows = [["交易对", "时间戳", "价格"]]; // 表头
  
  // 遍历价格数组,提取需要的字段
  for (var i = 0; i < pricesArray.length; i++) {
    var priceItem = pricesArray[i];
    // 提取嵌套的assetPair.id,以及timestamp和price
    var row = [
      priceItem.assetPair.id,
      priceItem.timestamp,
      priceItem.price
    ];
    rows.push(row);
  }
  
  // 批量写入数据到表格,比循环appendRow高效得多
  sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}

关键修改说明:

  1. 修正了GraphQL查询的空格问题:原"DAI/ETH "末尾的空格可能导致查询不到数据,已移除
  2. 正确遍历parsedData.data.prices数组(这才是存放价格数据的数组)
  3. 明确提取assetPair.id,而非直接取整个assetPair对象
  4. 采用批量写入方式,先收集所有行数据到rows数组,再用setValues一次性写入,避免多次操作表格的性能损耗
  5. 增加空数据判断,避免后续代码报错

运行这个函数后,Test工作表会在第1行显示表头,后续行依次展示交易对、时间戳和价格数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:45:33