如何用AppsScript检查Google Sheets表单缺失字段并提示用户
Google Sheet RIS表单提交前的数量字段验证实现
需求背景
已通过Google Sheet构建RIS请求表单,使用AppsScript将表单转为PDF发送给指定收件人。需添加提交前验证:当用户在描述列选择项目(库存编号和单位会自动填充),每个选中的项目必须填写数量才能提交;若存在缺失字段,触发提示并终止提交流程。
修改后的完整代码
function showAlert() { var ui = SpreadsheetApp.getUi(); var sh = SpreadsheetApp.getActive().getSheetByName('RIS Form'); try { // 先执行数量字段验证,不通过则直接提示并终止 if (!validateQuantityFields(sh)) { ui.alert("请为所有已选择的项目填写有效数量!"); return; } var result = ui.prompt( 'Submit request?', 'Enter recipient\'s email address:', ui.ButtonSet.YES_NO); var button = result.getSelectedButton(); var email = result.getResponseText(); var message = { to: email, subject: "Request and Issuance Slip", body: "New request! Please see attached file.", name: "RIS Alert", attachments: [SpreadsheetApp.getActiveSpreadsheet().getAs(MimeType.PDF).setName("Request Form")] } if (button == ui.Button.YES) { transfer(); hideAllSheetsExcept('RIS Form'); MailApp.sendEmail(message); ui.alert("Your request has been sent"); } } catch(e) { ui.alert(e.toString()); } } // 验证函数:检查所有已选项目的数量字段是否完整 function validateQuantityFields(sheet) { // 请根据你的表格实际结构修改范围参数:getRange(起始行, 起始列, 数据行数, 列数) // 示例:描述列在C列(第3列),数量列在E列(第5列),数据行从第8行到第49行 var dataRange = sheet.getRange(8, 3, 42, 3); var dataValues = dataRange.getValues(); for (var row of dataValues) { var hasDescription = row[0]; // 描述列的值 var quantity = row[2]; // 数量列的值 // 规则:有描述的项目必须填写数量,且数量大于0 if (hasDescription && (!quantity || quantity <= 0)) { return false; } } return true; }
关键说明
- 验证时机:将验证逻辑放在收件人弹窗之前,确保用户先完成必填项再进入提交流程
- 范围自定义:务必根据你的表格实际行列结构,修改
validateQuantityFields中的getRange参数,匹配描述列和数量列的位置 - 规则调整:当前验证规则为「有描述的项目必须填写大于0的数量」,可根据需求修改(比如允许数量为0则去掉
quantity <=0) - 语法修复:修正了原代码中
'Enter recipient's email address:'的单引号嵌套错误,改为'Enter recipient\'s email address:'避免运行报错
内容的提问来源于stack exchange,提问作者MMJJ
相关产品推荐
相关产品推荐

