Google Sheets技术需求:当日期到达时锁定单元格目标值
实现方案
核心思路
通过Google Apps Script创建定时触发脚本,每日自动检查主表日期:当日期等于当天时,将对应目标值从动态公式转换为静态数值(锁定),后续即使降水数据消失也不会改变;未到当天的日期保留原公式,维持可更新状态,确保临近日期的天气预报能同步更新目标值。
具体步骤
1. 打开脚本编辑器
在你的Google表格中,点击顶部菜单栏「扩展程序」→「Apps Script」,进入脚本编辑界面。
2. 粘贴脚本代码
function lockTargetValues() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const mainSheet = spreadsheet.getSheetByName("主表名称"); // 替换为你的第一个标签页实际名称 const today = new Date(); today.setHours(0, 0, 0, 0); // 统一时间为当天零点,避免时分秒干扰判断 // 假设日期在A列、目标值在C列,从第2行开始为数据行,可根据实际列位置调整 const dateRange = mainSheet.getRange("A2:A" + mainSheet.getLastRow()); const dates = dateRange.getValues(); const targetRange = mainSheet.getRange("C2:C" + mainSheet.getLastRow()); const targetFormulas = targetRange.getFormulas(); const targetValues = targetRange.getValues(); // 遍历每行数据,判断并锁定当天的目标值 for (let i = 0; i < dates.length; i++) { const rowDate = dates[i][0]; if (rowDate instanceof Date) { rowDate.setHours(0, 0, 0, 0); if (rowDate.getTime() === today.getTime()) { if (targetFormulas[i][0]) { mainSheet.getRange(i + 2, 3).setValue(targetValues[i][0]); } } } } }
3. 配置定时触发器
- 在脚本编辑器左侧点击「触发器」图标(闹钟样式);
- 点击「添加触发器」,按以下配置:
- 选择运行函数:
lockTargetValues - 部署类型:「基于时间的触发器」
- 时间驱动类型:「每天」
- 执行时间:设置为每日凌晨(如00:00-01:00),确保当天一开始就完成锁定
- 选择运行函数:
4. 自定义适配
- 替换代码中
"主表名称"为你第一个标签页的实际名称; - 若日期列/目标值列不是A/C列,修改
getRange的参数(比如日期在B列则改为"B2:B...",目标值在D列则将getRange(i + 2, 3)改为getRange(i + 2, 4)); - 首次运行脚本需完成Google授权,按页面提示操作即可。
原理说明
脚本每日自动执行:识别当天日期对应的目标值单元格,将动态公式替换为当前计算出的静态数值,彻底锁定该值;未到当天的单元格保留原INDEX MATCH公式,继续随降水数据更新,兼顾锁定历史值和实时更新临近值的需求。
内容的提问来源于stack exchange,提问作者Cecile
相关产品推荐
相关产品推荐

