如何在Google Apps Script生成的HTML表格中修改日期格式为9/1/22
解决Google Apps Script生成HTML表格时的日期格式问题
问题原因
从Google表格获取日期类型值时,Google Apps Script会将其转为JavaScript的Date对象,直接拼接进HTML时会自动调用toString()方法,导致显示完整的日期字符串而非你需要的短格式。
解决方案
在拼接HTML内容前,判断单元格值是否为Date对象,若是则用Utilities.formatDate()方法将其格式化为"MM/d/yy"(对应"9/1/22")格式,同时修正原代码中空值判断的逻辑错误。
修改后的完整代码
function sampleFunction() { var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var rangeValue = sh.getRange("E1").getValue(); // 改用getValue()获取单个单元格内容 var data = sh.getRange(rangeValue).getValues(); var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;"'; var htmltable = "<table " + TABLEFORMAT + ">"; for (let row = 0; row < data.length; row++) { htmltable += "<tr>"; for (let col = 0; col < data[row].length; col++) { let cellValue = data[row][col]; // 修正空值判断逻辑 if (cellValue === "" || cellValue === 0 || cellValue === null) { htmltable += "<td>None</td>"; } else if (row === 0) { htmltable += "<th>" + cellValue + "</th>"; } else { // 判断是否为Date对象并格式化 if (cellValue instanceof Date) { // 格式化为MM/d/yy,时区根据需求调整,示例为东部夏令时 var formattedDate = Utilities.formatDate(cellValue, "GMT-0400", "MM/d/yy"); htmltable += "<td>" + formattedDate + "</td>"; } else { htmltable += "<td>" + cellValue + "</td>"; } } } htmltable += "</tr>"; } htmltable += "</table>"; Logger.log(data); Logger.log(htmltable); MailApp.sendEmail(Session.getActiveUser().getEmail(), "Daily report", "", { htmlBody: htmltable, }); }
关键修改点说明
- 日期格式化:通过
cellValue instanceof Date判断日期类型,Utilities.formatDate(date, timeZone, format)生成指定格式:timeZone:可填时区标识符(如"America/New_York")或GMT偏移值(如"GMT-0400")format:"MM/d/yy"对应「月份/日期/两位年份」格式
- 空值判断修正:原代码
if (data[row][col] === "" || 0)存在逻辑错误,改为明确判断空字符串、0和null - 变量声明优化:给
row和col添加let声明,避免全局变量污染
内容的提问来源于stack exchange,提问作者Greg Davis
相关产品推荐
相关产品推荐

