如何在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
相关产品推荐
相关产品推荐

