如何用Google Apps Script在Google Sheet创建月份下拉并自动更新指定单元格
解决方案:Google Sheet 月份联动自动化设置
步骤1:创建A列月份下拉列表
- 选中A列(或你需要设置下拉的目标单元格范围)
- 点击菜单栏「数据」→「数据验证」
- 在弹出窗口中配置:
- 条件选择「列表项」
- 输入月份选项:
1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月(如果习惯用数字输入,也可以填1,2,3,4,5,6,7,8,9,10,11,12,后续代码对应调整即可) - 勾选「显示下拉箭头」,点击「保存」
步骤2:编写Apps Script实现联动逻辑
替换你现有的代码,使用以下带触发事件的脚本:
function onEdit(e) { // 获取当前编辑的工作表和单元格 const activeSheet = e.source.getActiveSheet(); const editedCell = e.range; // 仅处理A列的编辑操作 if (editedCell.getColumn() === 1) { let monthNum; const inputVal = editedCell.getValue(); // 中文月份转数字(如果用数字输入可删除这段映射) const monthMap = { "1月":1, "2月":2, "3月":3, "4月":4, "5月":5, "6月":6, "7月":7, "8月":8, "9月":9, "10月":10, "11月":11, "12月":12 }; monthNum = monthMap[inputVal] || (typeof inputVal === 'number' && inputVal >=1 && inputVal <=12 ? inputVal : null); // 非有效月份则终止执行 if (!monthNum) return; const currentYear = new Date().getFullYear(); // 计算该月份最后一天:传入下月1号的日期参数,设置日期为0会自动跳转到上月最后一天 const lastDay = new Date(currentYear, monthNum, 0); // 更新P8为该月份最后一天 activeSheet.getRange("P8").setValue(lastDay); // 设置L列和M列所有行的值为"1.250",这里取表格最后一行作为范围终点 const lastRow = activeSheet.getLastRow(); activeSheet.getRange(`L1:M${lastRow}`).setValue("1.250"); } }
脚本说明
onEdit(e)是Google Sheet内置的触发函数,表格单元格被编辑时会自动运行- 先判断编辑操作是否发生在A列,再将输入的月份转为数字(兼容中文和数字两种输入格式)
- 利用Date对象特性计算月份最后一天,避免手动判断每月天数
- 批量设置L、M列的值,比逐个单元格操作更高效
部署提示
- 打开目标Google Sheet,点击「扩展程序」→「Apps脚本」
- 替换现有代码为上述脚本,点击「保存」并给项目命名
- 返回表格编辑A列的月份选项,即可触发自动更新
内容的提问来源于stack exchange,提问作者MMJJ
相关产品推荐
相关产品推荐

