Google Sheets如何用GAS将MMMM格式日期的月份转为大写且保留日期类型
实现方案
首先明确核心逻辑:Google Sheets中设置了日期格式的单元格,实际存储的是数字类型的日期序列值,你看到的月份名称只是显示效果。要实现显示大写月份且保留日期属性,不需要修改单元格实际存储的日期值,只需调整显示格式即可。你之前的方案失效原因有两点:
getRange()返回的是单元格对象,不是字符串,直接调用toUpperCase()没有实际作用- 对
getValues()拿到的日期值调用toUpperCase(),会先把日期隐式转为字符串再转大写,赋值回单元格后就变成了文本类型,直接丢失日期属性
以下是可直接使用的GAS脚本实现:
function setUpperCaseMonthDisplay() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 此处替换为你需要处理的单元格范围,示例为A列全部单元格 const targetRange = sheet.getRange("A:A"); const cellValues = targetRange.getValues(); const formatList = []; for (let i = 0; i < cellValues.length; i++) { const currentVal = cellValues[i][0]; if (currentVal instanceof Date) { // 提取当前日期的大写月份名称 const upperMonth = Utilities.formatDate(currentVal, Session.getScriptTimeZone(), "MMMM").toUpperCase(); // 自定义格式用双引号包裹静态文本,不修改单元格实际存储的日期值 formatList.push([`"${upperMonth}"`]); } else { // 非日期单元格保留原有格式 formatList.push([targetRange.getCell(i+1, 1).getNumberFormat()]); } } // 批量写入格式,提升运行效率 targetRange.setNumberFormats(formatList); }
效果验证
运行脚本后,你可以用ISDATE()函数测试目标单元格,返回值为TRUE,仍可正常参与所有日期类计算,符合保留日期格式的要求。如果单元格的日期后续会修改,你可以在GAS编辑器中添加 onChange 触发器,自动触发脚本更新显示格式。
内容的提问来源于stack exchange,提问作者Verminous
相关产品推荐
相关产品推荐

