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

Google Sheets 按条件更新日期单元格手动脚本实现咨询

Google Sheets 服务日期自动更新脚本实现方法

操作步骤

  1. 打开目标Google表格,点击顶部菜单栏「扩展程序」->「Apps 脚本」,进入脚本编辑页,删除编辑器内默认的空函数代码
  2. 粘贴下方提供的完整脚本代码
  3. 点击页面顶部的「保存项目」按钮,自定义项目名称(例如:更新服务日期)
  4. 首次运行需要完成权限授权:点击运行按钮,在弹出的权限验证窗口中点击「高级」->「前往[你自定义的项目名](不安全)」,按提示完成授权即可,脚本为本地自研,不存在安全风险

核心功能逻辑

  • 自动读取F2单元格的日期作为更新阈值
  • 仅处理C列服务日期早于阈值的行
  • 符合条件的行自动将C列日期累加同行D列填写的天数
  • 批量读写数据,运行效率更高,避免逐行操作的卡顿问题

完整代码

function updateServiceDates() {
  // 获取当前活跃工作表
  const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 读取F2单元格的阈值日期
  const thresholdDate = new Date(activeSheet.getRange("F2").getValue());
  // 获取表格有效数据行数
  const dataLastRow = activeSheet.getLastRow();
  // 批量读取C、D两列的所有数据(默认表头在第1行,数据从第2行开始)
  const cdColumnsData = activeSheet.getRange(2, 3, dataLastRow - 1, 2).getValues();

  // 遍历处理每一行数据
  for (let rowIndex = 0; rowIndex < cdColumnsData.length; rowIndex++) {
    const currentServiceDate = new Date(cdColumnsData[rowIndex][0]);
    const addDays = cdColumnsData[rowIndex][1];
    // 跳过空值、无效日期、无效天数的行
    if (!currentServiceDate.getTime() || isNaN(addDays) || addDays <= 0) {
      continue;
    }
    // 判断当前服务日期是否早于阈值日期
    if (currentServiceDate < thresholdDate) {
      // 计算累加天数后的新日期(86400000为一天的毫秒数)
      const newServiceDate = new Date(currentServiceDate.getTime() + addDays * 86400000);
      cdColumnsData[rowIndex][0] = newServiceDate;
    }
  }

  // 批量将修改后的数据写回表格
  activeSheet.getRange(2, 3, dataLastRow - 1, 2).setValues(cdColumnsData);
}

日常使用方法

  • 方式1:每次需要更新时,进入Apps脚本编辑页,点击运行按钮即可完成更新
  • 方式2:在表格内添加快捷按钮:点击顶部菜单栏「插入」->「绘图」,绘制自定义按钮后保存到表格页面,右键点击按钮选择「指定脚本」,输入函数名updateServiceDates,之后直接点击表格内的按钮即可运行脚本

注意事项

  • 如果你的表格数据不是从第2行开始,可修改代码中getRange(2, 3, dataLastRow - 1, 2)的第一个参数为你的实际数据起始行号
  • 请确保F2单元格格式设置为日期格式,避免日期识别错误
  • D列的天数请填写正整数,避免出现计算异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:05