You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:57:02