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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:45:47