遍历月份数组时,如何解决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
相关产品推荐
相关产品推荐

