使用GoogleFinance API与Apps Script归档汇率数据出现异常值求助
问题原因与解决办法
问题根源
你遇到的日期乱码是Google Sheets自动格式解析导致的:
- GoogleFinance返回的汇率是纯数值(比如0.92这类小数),而Sheets里日期是以数值存储的——1对应1900年1月1日,小于1的数值会被自动解析成1899年底的日期(你看到的
30.12.1899 23:41:33就是接近0的数值转成的日期)。 - 日志显示正常是因为
Logger.log会自动把数值转成字符串输出,所以你看不到问题,但直接用appendRow写入原始数值时,Sheets触发了自动日期解析。
修复后的代码(转为字符串避免解析)
把汇率数值转换成字符串再写入,就能彻底规避自动解析问题:
function saveData() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var data = sheet.getRange(5,1,1,2).getValues(); // 将汇率数值转为字符串,防止被识别为日期 data[0][1] = data[0][1].toString(); Logger.log(data[0][0]+" ::: "+data[0][1]); sheet.appendRow(data[0]); Logger.log(data); }
替代方案(保留数值格式用于计算)
如果需要保留汇率的数值类型方便后续计算,可以先写入再强制设置单元格格式:
function saveData() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var data = sheet.getRange(5,1,1,2).getValues(); Logger.log(data[0][0]+" ::: "+data[0][1]); // 追加新行 var newRow = sheet.appendRow(data[0]); // 将新行的汇率列设置为数值格式(保留4位小数适配汇率精度) sheet.getRange(newRow.getRow(), 2).setNumberFormat("0.0000"); }
内容的提问来源于stack exchange,提问作者Jens W
相关产品推荐
相关产品推荐

