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

复制加密货币投资组合表格及脚本后遇TypeError报错求助

问题分析与解决方案

错误1:TypeError: Cannot read properties of null (reading 'getRange')

第17行报错说明myGoogleSheetName为null,即代码找不到名为Portfolio的工作表。常见原因:

  • 复制后的表格中工作表名称拼写错误(比如大小写不一致,原表格是Portfolio,复制后变成portfolio)
  • 工作表被删除或重命名

解决方法:

  1. 检查当前表格的工作表名称,确保存在完全匹配Portfolio的工作表(注意大小写敏感)
  2. 在代码开头添加存在性校验,提前抛出明确错误:
    const myGoogleSheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Portfolio');
    if (!myGoogleSheetName) {
      throw new Error("找不到名为'Portfolio'的工作表,请检查名称是否正确");
    }
    

错误2:TypeError: Cannot read properties of null (reading 'quote')

第31行报错说明API返回的数据中d.data[ticker]为null,可能原因:

  • 输入的币种符号错误(拼写错误或CMC不识别该符号)
  • API密钥权限不足(比如免费版限制了可访问的币种数量)
  • 请求触发CMC API速率限制,返回错误响应

解决方法:
在处理API返回数据前添加校验,避免直接访问不存在的属性:

const d = JSON.parse(txt);
const row = i + 6;

// 校验数据完整性
if (!d.data || !d.data[ticker] || !d.data[ticker].quote?.USD) {
  myGoogleSheetName.getRange(row, 2).setValue('获取失败');
  console.log(`币种${ticker}数据异常:${txt}`);
  continue; // 跳过当前币种,继续处理下一个
}

myGoogleSheetName.getRange(row, 2).setValue(d.data[ticker].quote.USD.price);

完整修改后的代码

function coin_price() {
  const myGoogleSheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Portfolio');
  // 校验工作表是否存在
  if (!myGoogleSheetName) {
    throw new Error("找不到名为'Portfolio'的工作表,请检查名称是否正确");
  }

  const coinMarketCapAPICall = {
    method: "GET",
    headers: { "X-CMC_PRO_API_KEY": "YOUR-API-KEY" }, // 替换成你的CMC API密钥
    muteHttpExceptions: true, // 允许捕获HTTP错误响应
  }

  let myCoinSymbols = [];
  const getValues = myGoogleSheetName.getRange('A6:A').getValues();
  const numRows = getValues.filter(symbol => symbol[0] !== "").length;
  const coinSymbols = getValues.slice(0, numRows);

  // 遍历币种
  for (let i = 0; i < coinSymbols.length; i++) {
    const ticker = coinSymbols[i][0].trim(); // 去除符号前后空格
    if (!ticker) continue; // 跳过空单元格

    const coinMarketCapUrl = `https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=${ticker}&convert=USD`;
    const result = UrlFetchApp.fetch(coinMarketCapUrl, coinMarketCapAPICall);
    const txt = result.getContentText();
    const d = JSON.parse(txt);
    const row = i + 6;

    // 校验API返回数据
    if (!d.data || !d.data[ticker] || !d.data[ticker].quote?.USD) {
      myGoogleSheetName.getRange(row, 2).setValue('获取失败');
      console.log(`币种${ticker}数据异常:${txt}`);
      Utilities.sleep(1000); // 避免请求过快触发限制
      continue;
    }

    myGoogleSheetName.getRange(row, 2).setValue(d.data[ticker].quote.USD.price);
    Utilities.sleep(1000); // 每次请求后延迟1秒,符合CMC免费版速率限制
  }
}

额外注意事项

  • 务必替换代码中的YOUR-API-KEY为你自己的CMC Pro API密钥
  • CMC免费版API有速率限制(每分钟最多10次请求),代码中添加了Utilities.sleep(1000)控制请求间隔
  • 检查A列的币种符号是否完全符合CMC的标准格式(比如ETH、BTC,注意大小写)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:24:56