修改CoinMarketCap谷歌表格App Script,支持拖拽批量读取加密货币行情
解决CoinMarketCap谷歌表格脚本动态读取加密货币代码的问题
需求
修改现有CoinMarketCap谷歌表格脚本,实现在单元格调用并向下拖拽时,自动读取对应行另一列的加密货币代码(ticker),返回对应价格。
原脚本(固定查询BTC)
function getLatestBTCPrice() { var url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest"; var apiKey = 'YOUR_API_KEY'; // 替换为你的API密钥 var headers = { "X-CMC_PRO_API_KEY": apiKey, "Accept": "application/json" }; var parameters = { "symbol": "BTC" }; var response = UrlFetchApp.fetch(url + "?" + Object.keys(parameters).map(key => key + '=' + parameters[key]).join('&'), {'headers': headers}); var json = JSON.parse(response.getContentText()); var btcPrice = json.data.BTC.quote.USD.price; return btcPrice; }
你的尝试脚本及核心问题
你修改后无法成功,问题出在两处:
- 固定读取
A3单元格,拖拽时不会自动匹配当前行的ticker - 使用
json.data.ETC.quote.USD.price这种点语法访问数据,无法动态替换为变量ticker
你的尝试脚本:
function getTickerPrice() { var url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest"; var apiKey = 'YOUR_API_KEY'; // 替换为你的API密钥 var headers = { "X-CMC_PRO_API_KEY": apiKey, "Accept": "application/json" }; var sheet = SpreadsheetApp.getActiveSpreadsheet(); var ticker = sheet.getRange('A3').getValue(); var parameters = { "symbol": ticker }; var response = UrlFetchApp.fetch(url + "?" + Object.keys(parameters).map(key => key + '=' + parameters[key]).join('&'), {'headers': headers}); var json = JSON.parse(response.getContentText()); var tickerPrice = json.data.ETC.quote.USD.price; return tickerPrice; }
正确修改后的脚本
function getTickerPrice(ticker) { // 处理空输入的情况 if (!ticker) return ""; var url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest"; var apiKey = 'YOUR_API_KEY'; // 替换为你的API密钥 var headers = { "X-CMC_PRO_API_KEY": apiKey, "Accept": "application/json" }; var parameters = { "symbol": ticker.toUpperCase() // 统一转为大写,避免大小写不匹配 }; // 构建请求URL,处理特殊字符 var queryString = Object.keys(parameters).map(key => key + '=' + encodeURIComponent(parameters[key])).join('&'); var response = UrlFetchApp.fetch(url + "?" + queryString, {'headers': headers}); var json = JSON.parse(response.getContentText()); // 用方括号语法动态访问ticker对应的数据,同时处理无效代码情况 if (json.data && json.data[ticker.toUpperCase()]) { return json.data[ticker.toUpperCase()].quote.USD.price; } else { return "无效代码"; } }
关键修改说明
- 函数接收参数:将函数定义改为
getTickerPrice(ticker),表格调用时可直接传入单元格值,拖拽时自动匹配当前行 - 动态访问JSON:用
json.data[ticker.toUpperCase()]替代点语法,实现根据变量ticker动态获取数据 - 容错处理:
- 空输入返回空字符串
- 统一ticker为大写,避免大小写不匹配错误
- 检测ticker是否有效,无效时返回提示文本
- 优化URL构建:用
encodeURIComponent处理参数,避免特殊字符导致请求失败
使用方法
在需要显示价格的单元格(如B3)输入:
=getTickerPrice(A3)
向下拖拽该单元格,脚本会自动读取对应行A列的ticker,返回对应加密货币的价格。
内容的提问来源于stack exchange,提问作者Guido
相关产品推荐
相关产品推荐

