使用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
相关产品推荐
相关产品推荐

