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

遍历月份数组时,如何解决Google Apps Script的Utilities.formatDate参数错误?

问题解决:Utilities.formatDate 参数不匹配错误

错误原因

Utilities.formatDate() 要求第一个参数必须是单个Date对象,但你传入的data4是getValues()返回的二维数组(格式为[[日期1, 日期2, ..., 日期12]]),直接传入数组导致参数类型不匹配。另外你的内层循环j从1开始,会跳过第一个月份(索引0),不符合遍历12个月份的需求。

修正后的代码

function allData_Price_2020(sheet1, sheet2) {
  var data1 = sheet1.getRange("B:D").getValues(); // 获取所有PN、CC、LC
  var data2 = sheet2.getRange("A:A").getValues(); // 获取拼接后的PN、CC、LC
  var data3 = sheet2.getDataRange().getValues(); // 获取标签页所有数据
  var data4 = sheet1.getRange(4, 93, 1, 12).getValues(); // 从价格表获取月份

  for (var i = 4; i < data1.length; i++) { // 从第5行开始迭代
    // 内层循环从索引0开始,遍历全部12个月份
    for (var j = 0; j < data4[0].length; j++) {
      // 取出当前单元格的单个日期值
      var currentDate = data4[0][j];
      // 先验证是否为有效Date对象,避免报错
      if (currentDate instanceof Date) {
        // 提取月份数值(格式为两位数字,如3月返回"03",转成数字就是3)
        var monthStr = Utilities.formatDate(currentDate, Session.getScriptTimeZone(), "MM");
        var monthNum = parseInt(monthStr, 10);
        // 后续逻辑可以使用monthNum
      }
    }
  }
}

关键修正点

  • 从data4[0][j]取出单个日期值,而非直接传入整个数组
  • 内层循环j从0开始,确保遍历全部12个月份
  • 添加instanceof Date判断,避免非日期值导致额外报错
  • 将格式化后的月份字符串转成数字(如果需要数值类型)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:19:58