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

使用Utilities.formatDate格式化邮件日期时遇参数不匹配异常求助

解决Utilities.formatDate参数不匹配问题及日期格式修改

错误原因

抛出的Exception: The parameters (String,String,String) don't match the method signature for Utilities.formatDate错误,核心原因是**Utilities.formatDate的第一个参数必须是Date类型**,但你从表格中获取的taskAsignDate(dataRange[i][0])是字符串格式,导致参数类型不匹配。

修复步骤及代码调整

1. 日期字符串转Date对象

将表格中获取的日期字符串转换为Date对象,再传入Utilities.formatDate。如果表格中的日期是标准格式(如yyyy-MM-dd),直接用new Date()即可转换;如果是自定义格式,可能需要额外处理,但大部分情况下标准格式都能直接转换。

2. 修正冗余代码

你的内层j循环完全多余——你不需要遍历每一列,只需要检查对应状态列的值即可。另外status的赋值明显错误(当前赋值为dataRange[i][1],也就是taskId),需要修正为对应状态的列索引(假设状态在第9列,索引为8,根据你的表格结构调整)。

3. 统一日期格式化(可选)

如果dueDate也需要在邮件中格式化,同样要做类型转换和格式化处理。

修改后的完整代码

function findCell() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("DELEGATION");
  var lr = sheet.getLastRow();
  var dataRange = sheet.getRange(5, 1, lr - 4, 9).getValues();
  var currentDate = new Date(); // 重命名变量避免混淆

  for (var i = 0; i < dataRange.length; i++) {
    var row = dataRange[i];
    var taskAsignDate = row[0];
    var taskId = row[1];
    var doerName = row[2];
    var taskName = row[4];
    var dueDate = row[5];
    var taskAsignBy = row[6];
    var status = row[8]; // 修正为状态列的索引,根据实际表格调整
    
    // 处理日期格式:先转成Date对象,再格式化
    var formattedAssignDate = Utilities.formatDate(new Date(taskAsignDate), "GMT", "dd-mm-yy");
    // 如果dueDate也需要格式化,同样处理
    var formattedDueDate = Utilities.formatDate(new Date(dueDate), "GMT", "dd-mm-yy");

    var htmlfile = HtmlService.createTemplateFromFile("email");
    htmlfile.taskAsignDate = formattedAssignDate;
    htmlfile.taskId = taskId;
    htmlfile.doerName = doerName;
    htmlfile.taskName = taskName;
    htmlfile.dueDate = formattedDueDate; // 使用格式化后的日期
    htmlfile.taskAsignBy = taskAsignBy;
    htmlfile.status = status;
    var htmlforemail = htmlfile.evaluate().getContent();

    // 检查状态、收件人及截止日期条件
    if (status == "Pending" && doerName == "Mr. Deepak Raj" && new Date(dueDate) <= currentDate) {
      Logger.log(row);
      GmailApp.sendEmail("abc@abc.com", "Test HTML", "HTML FILE", { htmlBody: htmlforemail });
    }
  }
}

关键说明

  • new Date(taskAsignDate):将表格中的日期字符串转换为Date对象,确保符合Utilities.formatDate的参数要求。
  • 移除内层j循环:避免不必要的遍历,提升代码效率。
  • 修正status列索引:根据你的实际表格结构调整row[8]为正确的状态列索引。
  • 日期比较:new Date(dueDate) <= currentDate确保日期比较是基于Date对象的,避免字符串比较的逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:45:34