Google Apps Script发送含HTML表格多行数据的邮件时运行失败求助
问题根因
- 未处理空输入:用户仅填写部分行号时,未填写的输入项会返回空字符串,直接作为行号传入
getRange()方法会触发参数非法异常,导致脚本终止 - 语法错误:原代码中
tableRowTwo变量定义末尾错误使用+而非语句结束符;,导致脚本解析失败 - 未定义变量:原代码中直接使用了
date、tableHeaders、endOfEmail、emailAddress四个未赋值的变量,运行时会抛出引用错误 - 别名参数错误:
GmailApp.getAliases()返回的是邮箱别名数组,不能直接传入from参数,需要指定具体使用的别名下标
修复方案
优化为动态适配任意数量(最多5行)输入的逻辑,自动过滤空输入、校验行号合法性,避免重复代码:
function emailAgent(formObject){ // 请自行补充此处缺失的变量赋值,适配实际业务需求 const emailAddress = "收件人邮箱地址"; const date = new Date().toLocaleDateString(); const tableHeaders = '<tr><th style="text-align: center; border: 2px solid black; border-collapse: collapse; padding: 5px;">详情</th></tr>'; const endOfEmail = '</table><p>邮件末尾自定义内容</p>'; const useAlias = GmailApp.getAliases()[0]; // 取第一个可用别名,可按需调整下标 // 初始化工作表 var ss = SpreadsheetApp.getActiveSpreadsheet() var sheet1 = ss.getSheetByName('Sheet1'); // 处理用户提交的行号,过滤空输入和非法值 const rowFields = [formObject.rowOne, formObject.rowTwo, formObject.rowThree, formObject.rowFour, formObject.rowFive]; const validRows = rowFields .map(rowStr => rowStr ? parseInt(rowStr.trim()) : NaN) .filter(rowNum => !isNaN(rowNum) && rowNum > 0); // 批量生成表格行HTML let tableRows = ""; validRows.forEach(rowNum => { const details = sheet1.getRange(rowNum, 11).getValue(); tableRows += `<tr> <td style="text-align: center; border: 2px solid black; border-collapse: collapse; padding: 5px;">${details}</td> </tr>`; }); // 拼接邮件内容并发送 const message = ""; const subject = "Request to add " + date; const body = `<body> <table style="border-collapse: collapse;"> ${tableHeaders} ${tableRows} ${endOfEmail} </body>`; GmailApp.sendEmail(emailAddress, subject, message, { 'from': useAlias, 'replyTo': useAlias, htmlBody: body }); }
调试方法
后续排查报错可在代码中添加console.log()打印中间变量,运行后在Apps Script编辑器的「执行日志」中查看具体报错信息,快速定位问题点。
内容的提问来源于stack exchange,提问作者Matt Mitchell
相关产品推荐
相关产品推荐

