Google Apps Script HTML打印时的时间戳格式设置问题
问题:Google Sheets时间戳在HTML输出中格式异常
Google Sheets中时间戳存储格式为MM/DD/YYYY HH:MM:SS,但通过Apps Script拉取数据并在HTML页面展示时,时间戳变成了默认的Fri Dec 09 2022 15:16:47 GMT-0700 (Mountain Standard Time)格式,无法保持表格中的显示格式。
现有脚本逻辑:从Google Sheet拉取数据,校验登录用户邮箱,仅返回匹配的用户记录并生成HTML表格展示。
问题根源
当前代码使用getValues()方法获取数据,该方法会将Sheet中的日期单元格转换为JavaScript Date对象。当直接将Date对象拼接进HTML字符串时,会自动触发toString()方法,导致格式变为默认的长日期字符串。
解决方案1:直接获取表格显示格式的数据
使用getDisplayValues()替换getValues(),该方法会直接返回单元格中显示的文本内容,包括已设置好的时间戳格式,无需额外处理。
修改后的完整getData()函数:
function getData() { var sheetName = dataSheet; var activeSheet = ss.getSheetByName(sheetName); // 替换getValues()为getDisplayValues(),直接获取显示文本 var values = activeSheet.getDataRange().getDisplayValues(); var header = values[0]; var emailIndex = header.indexOf(emailHeader); var userData = []; for (var i = 0; i < values.length; i++) { if (values[i][emailIndex] == activeUser) { userData.push(values[i]); } } if (userData.length > 0) { var tableStart = '\n<table class="table table-hover table-sm">'; var tableHead = '\n<thead>\n<tr>'; for (var j = 0; j < header.length; j++) { tableHead = tableHead + '\n<th>' + header[j] + '</th>'; } tableHead = tableHead + '\n</tr>\n</thead>'; var tableBody = '\n<tbody>'; for (var k = 0; k < userData.length; k++) { tableBody = tableBody + '\n<tr>'; for (var l = 0; l < userData[0].length; l++) { tableBody = tableBody + '\n<td>' + userData[k][l] + '</td>'; } tableBody = tableBody + '\n</tr>\n'; } var tableEnd = '</tbody>\n</table>'; var tableHtml = tableStart + tableHead + tableBody + tableEnd; return tableHtml; } else { return '<table class="table"><tbody><tr><td>No data found.</td></tr></tbody></table>'; } }
解决方案2:手动格式化Date对象(保留Date操作能力)
如果后续需要对日期进行计算、时区转换等操作,不想直接用显示文本,可以在拼接HTML时判断值类型,手动将Date对象格式化为目标格式:
修改表格体的循环逻辑:
for (var k = 0; k < userData.length; k++) { tableBody = tableBody + '\n<tr>'; for (var l = 0; l < userData[0].length; l++) { var cellValue = userData[k][l]; // 判断当前值是否为Date对象 if (cellValue instanceof Date) { // 使用Utilities.formatDate格式化日期,指定时区和格式 var formattedDate = Utilities.formatDate( cellValue, Session.getScriptTimeZone(), // 脚本时区,也可手动指定如"America/Denver" "MM/dd/yyyy HH:mm:ss" ); tableBody = tableBody + '\n<td>' + formattedDate + '</td>'; } else { tableBody = tableBody + '\n<td>' + cellValue + '</td>'; } } tableBody = tableBody + '\n</tr>\n'; }
内容的提问来源于stack exchange,提问作者John Spartan
相关产品推荐
相关产品推荐

