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

Google Sheets如何自动生成上月日期列表且避免出现跨月日期

纯公式实现方案(兼容移动端,无需脚本)

直接在A5单元格输入以下数组公式即可自动生成完整的上月日期列表,不会出现跨月无效日期,无需依赖隐藏列:
=ARRAYFORMULA(EOMONTH(TODAY("GMT-5"),-2)+SEQUENCE(DAY(EOMONTH(TODAY("GMT-5"),-1)),1,1,1))

  • 公式逻辑说明:
    • EOMONTH(TODAY("GMT-5"),-2) 取上上个月的最后一天,加1即为上月第一天
    • DAY(EOMONTH(TODAY("GMT-5"),-1)) 自动计算上月的总天数,作为序列的长度
    • SEQUENCE生成对应长度的连续整数,和上上个月最后一天相加即可得到上月全部日期
  • 若使用不支持自动溢出的旧版Google Sheets,可先选中A5:A35区域,输入公式后按Ctrl+Shift+Enter确认即可。
极简Apps Script实现方案

如果需要生成静态日期,可使用以下脚本,无需后续校验逻辑,直接按上月实际天数写入对应日期,多余单元格自动清空:

function generateLastMonthDates() {
  // 替换为你的实际工作表名称
  const sheet = SpreadsheetApp.getActive().getSheetByName('test');
  const today = new Date();
  // 计算上月第一天
  const lastMonthFirst = new Date(today.getFullYear(), today.getMonth() - 1, 1);
  // 计算上月总天数
  const lastMonthTotalDays = new Date(today.getFullYear(), today.getMonth(), 0).getDate();
  // 生成日期二维数组
  const dateList = Array.from({length: lastMonthTotalDays}, (_, index) => [
    new Date(lastMonthFirst.getFullYear(), lastMonthFirst.getMonth(), index + 1)
  ]);
  // 清空原有内容
  sheet.getRange('A5:A35').clearContent();
  // 写入日期
  sheet.getRange(5, 1, lastMonthTotalDays, 1).setValues(dateList);
  // 可选:统一设置日期显示格式
  sheet.getRange(5, 1, lastMonthTotalDays, 1).setNumberFormat('yyyy-mm-dd');
}
原有代码问题说明
  • assignDates函数存在语法错误,setFormula的参数未加引号,且未提前定义sheet变量
  • dateCheck函数逻辑颠倒,你需要删除的是不包含上月月份的日期,原代码写为删除包含当前月的日期;同时getRangeList参数传入的是日期值而非单元格地址,导致运行失败。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:06:06