Google Sheets转PDF日期格式错误,如何设置仅显示MM/DD/YYYY格式?
问题原因
Google Apps Script的getValues()方法读取单元格内容时,会自动将表格中存储的日期类型值转换为JavaScript原生Date对象,直接调用替换方法时会默认输出完整的GMT格式时间字符串,而非表格中设置的MM/DD/YY显示格式。
最优修复方案
将读取行数据和表头的方法从getValues()替换为getDisplayValues(),该方法会直接提取单元格中可见的格式化文本内容,完全匹配你在Google Sheet中看到的日期显示效果,不需要额外创建新日期,符合你的需求。
修改后完整代码
function onOpen (){ SpreadsheetApp.getUi().createMenu('Create PDF').addItem('Create PDF','createPDF').addToUi() } function createPDF(){ let copyFile = DriveApp.getFileById('[*google doc唯一链接已移除*]').makeCopy(), copyID = copyFile.getId(), copyDoc = DocumentApp.openById(copyID), copyBody = copyDoc.getBody() let activeSheet = SpreadsheetApp.getActiveSheet(), numOfCol = activeSheet.getLastColumn(), activeRowIndex = activeSheet.getActiveRange().getRowIndex(), // 替换getValues为getDisplayValues activeRow = activeSheet.getRange(activeRowIndex, 1,1,numOfCol).getDisplayValues(), headerRow = activeSheet.getRange(1,1,1,numOfCol).getDisplayValues(), columnIndex = 0 for (; columnIndex < headerRow[0].length; columnIndex++){ copyBody.replaceText('%' + headerRow[0][columnIndex] + '%',activeRow[0][columnIndex]) } copyDoc.saveAndClose() let newFile = DriveApp.createFile(copyDoc.getAs('Application/PDF')) newFile.setName(activeRow[0][2]+ ', ' + activeRow[0][3] + ', ' + activeRow[0][4] +' (客户报价页)') copyFile.setTrashed(true) SpreadsheetApp.getUi().alert('PDF已生成到你的云盘') }
备选方案(仅当你需要保留其他列原始数值类型时使用):
在循环替换时判断值类型,如果是日期就用工具类按表格时区格式化:for (; columnIndex < headerRow[0].length; columnIndex++){ let cellValue = activeRow[0][columnIndex] if(cellValue instanceof Date) { // 对应你表格的MM/DD/YY格式 cellValue = Utilities.formatDate(cellValue, SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "MM/dd/yy") } copyBody.replaceText('%' + headerRow[0][columnIndex] + '%', cellValue) }
内容的提问来源于stack exchange,提问作者Jon Oneill
相关产品推荐
相关产品推荐

