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

如何在AppScript中按日期过滤JSON数组?阿尔伯塔油价数据异常

解决阿尔伯塔省油价数据日期过滤问题

问题分析

  • 未初始化spreadsheet变量:代码直接调用spreadsheet.getSheetByName()但未定义该变量,会触发运行错误。
  • 日期过滤逻辑错误:API返回的是对象数组,而非二维数组,用r[0]获取日期会得到undefined,转换为日期后是无效值,导致过滤后数据为空。
  • 字段名错误:代码中使用obs['Type '](带空格),但API返回的字段名为Type(无空格),无法正确获取类型数据。
  • 变量作用域问题:newSheet在if块内用var声明,else块直接赋值存在作用域隐患。

修正后的代码

function fetchOilPrices() { 
  var sheetName = 'Oil Prices';
  // 初始化spreadsheet变量,获取当前活动表格
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  
  // 提前声明newSheet变量,避免作用域问题
  var newSheet;
  // 检查工作表是否存在
  var existingSheet = spreadsheet.getSheetByName(sheetName); 
  if (!existingSheet) { 
    // 创建新工作表
    newSheet = spreadsheet.insertSheet(sheetName); 
  } else { 
    // 复用已有工作表
    newSheet = existingSheet; 
  } 
    
  var url = "https://api.economicdata.alberta.ca/api/data?code=0d593867-2089-4514-8901-9e2d7f666e0c"; 
  var options = {
      "method": "get",
  }; 

  var response = UrlFetchApp.fetch(url, options); 
  const dt = new Date(2010, 0, 1).valueOf();
  // 修正日期过滤逻辑:读取对象的Date字段获取日期字符串
  const data = JSON.parse(response.getContentText()).filter(r => new Date(r.Date).valueOf() > dt)
    
  var recentData = [["Date", "Type", "Value"]]; // 表头
  
  // 遍历数据,修正Type字段名(去掉多余空格)
  data.forEach(function(obs) { 
    recentData.push([obs.Date, obs.Type, obs.Value]);
  }); 
 
  // 清空工作表内容
  newSheet.clearContents(); 
  Logger.log(sheetName + " cleared.") 
  
  // 写入数据到工作表
  newSheet.getRange(1, 1, recentData.length, 3).setValues(recentData); 
  Logger.log("Written data for " + data.length + " observations.");
}

关键修改说明

  1. 初始化spreadsheet:添加var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();,确保能正确访问目标表格。
  2. 修正日期过滤:将r[0]改为r.Date,直接读取API返回对象的日期字段,转换为时间戳后与目标日期比较。
  3. 修正字段名:将obs['Type ']改为obs.Type,匹配API返回的实际字段名。
  4. 调整变量作用域:提前声明newSheet变量,避免块级作用域导致的变量未定义问题。

内容的提问来源于stack exchange,提问作者Allister Lobo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:05:56