Google Script解析无效日期时如何捕获错误?
问题解决思路与调整方案
你的代码未按预期显示自定义提示,大概率是两个核心问题:要么使用了无权限的简单触发器导致弹窗调用失败,要么弹窗内容为空用户无法感知。以下是针对性的解决办法:
方案1:用Toast提示(适配简单触发器,无需授权)
如果代码是在onEdit这类简单触发器中运行,showModalDialog需要额外授权,简单触发器无法调用。换成Toast提示即可正常生效:
var mDay = "30"; var mMonth = "02"; var mYear = "2023"; mStart = "00:00"; var mDate = mDay + mMonth + mYear + mStart; try { mDate = Utilities.parseDate(mDate, Session.getScriptTimeZone(), "ddMMyyyyhh:mm"); } catch (err) { // 显示Toast提示,持续5秒 SpreadsheetApp.getActiveSpreadsheet().toast("请输入有效的日期格式!", "错误提示", 5); return; }
方案2:修复弹窗内容+使用可安装触发器(适合弹窗场景)
若必须用弹窗提示,需做两个调整:
- 给弹窗添加可见的提示文字;
- 将触发器改为可安装触发器(手动创建的
onEdit触发器),它具备授权可调用Ui服务。
调整后的代码:
var mDay = "30"; var mMonth = "02"; var mYear = "2023"; mStart = "00:00"; var mDate = mDay + mMonth + mYear + mStart; try { mDate = Utilities.parseDate(mDate, Session.getScriptTimeZone(), "ddMMyyyyhh:mm"); } catch (err) { // 给弹窗添加提示文本,优化用户感知 var output = HtmlService.createHtmlOutput('<p style="text-align:center; padding:10px;">无效日期,请检查输入格式!</p>') .setWidth(350) .setHeight(80); SpreadsheetApp.getUi().showModalDialog(output, "日期错误"); return; }
额外优化:提前验证输入格式
在调用parseDate前先做基础校验,能减少报错触发的概率:
// 清理输入中的非数字字符(比如把"30."转为"30") mDay = mDay.replace(/\D/g, ""); mMonth = mMonth.replace(/\D/g, ""); mYear = mYear.replace(/\D/g, ""); // 基础格式校验 if (parseInt(mMonth) < 1 || parseInt(mMonth) > 12) { SpreadsheetApp.getActiveSpreadsheet().toast("月份必须是1-12之间的数字!", "错误提示", 5); return; } // 再执行parseDate的验证逻辑 try { mDate = Utilities.parseDate(mDate, Session.getScriptTimeZone(), "ddMMyyyyhh:mm"); } catch (err) { // 提示代码 }
内容的提问来源于stack exchange,提问作者Vítek Herzina
相关产品推荐
相关产品推荐

