API数组导入Google Sheets优化:移除冗余列与时间戳格式化
解决Google Apps Script导入BTC K线数据的两个问题:移除冗余列与时间戳转换
问题分析
你的代码存在冗余循环导致重复写入的问题,同时未处理时间戳格式转换和冗余列清理。下面直接给出修复方案及说明:
修复后的代码
function BTC_1hour() { // 请替换为API的完整域名(如对应交易所的官方API地址) var url = 'https://api.example.com/api/v1/market/candles?type=1min&symbol=BTC-USDT&startAt=1566703297'; var response = UrlFetchApp.fetch(url); var JSONresponse = JSON.parse(response); var rawData = JSONresponse.data; // 处理数据:转换时间戳 + 移除F、G列(对应数组索引5、6) var processedData = rawData.map(row => { // 秒级时间戳转毫秒,生成可读日期对象 const readableTime = new Date(row[0] * 1000); // 保留A-E列(索引0-4),剔除F-G冗余列 return [readableTime, row[1], row[2], row[3], row[4]]; }); var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('1h'); // 清空原有内容(可选,避免数据重复堆积) sheet.clearContents(); // 一次性写入处理后的数据 if (processedData.length > 0) { sheet.getRange(1, 1, processedData.length, processedData[0].length).setValues(processedData); // 强制设置A列日期显示格式 sheet.getRange(1, 1, processedData.length).setNumberFormat("yyyy-MM-dd HH:mm:ss"); } }
关键修复说明
- 清理冗余列:通过
map遍历每条K线数据,仅保留需要的A-E列。如果冗余列位置不同,直接调整return语句中的元素即可(比如要保留后续列,可改为[readableTime, ...row.slice(1,5), ...row.slice(7)])。 - 转换时间戳:将秒级时间戳乘以1000转为毫秒,用
new Date()生成可读日期对象,再通过setNumberFormat指定日期显示格式(可按需修改格式字符串)。 - 优化脚本效率:删除原代码中无意义的嵌套循环,避免重复写入;仅调用一次
setValues提升运行速度;添加清空步骤防止新旧数据重叠。
内容的提问来源于stack exchange,提问作者Welchums
相关产品推荐
相关产品推荐

