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

如何在Google Apps Script中按今日日期查找行或范围并赋值

解决Google表格中查找今日日期行并填充数据的问题

问题描述

我有一个Google表格,包含Date、Name、Number列。想要将B2、C2的值填入A列日期为今日的对应B、C列单元格。尝试了以下代码,但因未定义TodayDatedRow变量无法运行,需要知道如何查找对应今日日期的行或范围:

function myFunction() {
  ss = SpreadsheetApp.getActiveSpreadsheet() ;
  values = ss.getRangeByName("Sheet1!b2:c2").getDisplayValues() ;
  
  ss.getRange(TodayDatedRow).setValues(values) ;
}

解决方案

要实现这个功能,核心是找到A列中日期等于今日的行号,再将B2、C2的值写入该行的B、C列。以下是修正后的完整代码:

function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Sheet1"); // 指定目标工作表
  const sourceRange = sheet.getRange("B2:C2");
  const values = sourceRange.getValues(); // 获取B2:C2的原始值,避免格式转换问题
  
  // 获取A列所有日期数据并扁平化处理
  const dateColumn = sheet.getRange("A:A").getValues().flat();
  const today = new Date();
  // 统一日期格式为yyyy-MM-dd,消除时分秒对匹配的干扰
  const todayStr = Utilities.formatDate(today, Session.getScriptTimeZone(), "yyyy-MM-dd");
  
  // 遍历查找今日日期对应的行号
  let targetRow = -1;
  for (let i = 0; i < dateColumn.length; i++) {
    if (dateColumn[i] instanceof Date) {
      const rowDateStr = Utilities.formatDate(dateColumn[i], Session.getScriptTimeZone(), "yyyy-MM-dd");
      if (rowDateStr === todayStr) {
        targetRow = i + 1; // 表格行号从1开始,数组索引需+1转换
        break;
      }
    }
  }
  
  // 找到目标行后写入数据
  if (targetRow !== -1) {
    const targetRange = sheet.getRange(targetRow, 2, 1, 2); // 定位到目标行的B、C列区域
    targetRange.setValues(values);
    console.log("数据已成功写入第" + targetRow + "行");
  } else {
    console.log("未找到今日日期对应的行");
  }
}

关键细节说明

  • 日期匹配:用Utilities.formatDate统一日期格式,避免因表格日期无时分秒、当前日期带时分秒导致的匹配失败。
  • 行号转换:数组索引从0开始,表格实际行号从1开始,所以找到匹配索引后需加1得到正确行号。
  • 范围定位:getRange(targetRow, 2, 1, 2)表示从目标行第2列(B列)开始,选取1行2列的区域,正好对应B、C两列。

内容的提问来源于stack exchange,提问作者PRATAP KUMAR KOTTI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:25:17