Google Apps Script如何按D列筛选数据跨表格复制并加时间戳
解决后完整脚本
var sourceSpreadsheetID= "Spreadsheet1 ID"; var sourceWorksheetName= "BusinessDetails"; var targetSpreadsheetID= "Spreadsheet2 ID"; var targetWorksheetName= "Sheet5"; // 定义D列需要匹配的名称列表,后续增删筛选值直接改这里即可 var allowedNames = ["Jean", "Fred", "Mary"] function importBusinessDetailsData(){ // 获取源表全量数据 var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID); var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName); var allSourceData = thisWorksheet.getDataRange().getValues(); // 筛选符合条件的行:默认保留表头+D列匹配指定名称的行 var filteredData = allSourceData.filter(function(row, index) { // 第一行是表头直接保留,不需要保留表头可删除本行判断 if (index === 0) return true // D列对应数组索引为3,判断值是否在允许列表内 return allowedNames.includes(row[3]) }) // 处理目标表 var toSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetID); var toWorksheet = toSpreadsheet.getSheetByName(targetWorksheetName); // 先清空目标表所有旧数据,避免残留 toWorksheet.clear() // > 提示:如果需要保留目标表的单元格格式,把上面的clear()替换为clearContents()即可 // 写入筛选后的数据,从第2列开始写入(第1列预留放时间戳) var targetDataRange = toWorksheet.getRange(1, 2, filteredData.length, filteredData[0].length) targetDataRange.setValues(filteredData) // 批量写入时间戳到A列,和有效行数对齐 var timeStamp = new Date() var timeStampArr = Array(filteredData.length).fill([timeStamp]) // > 提示:如果不需要表头行A列显示时间戳,仅给数据行加时间戳,把上面一行替换为下方代码即可 // var timeStampArr = [[null]].concat(Array(filteredData.length -1).fill([timeStamp])) toWorksheet.getRange(1, 1, filteredData.length, 1).setValues(timeStampArr) }
核心修改说明
- 新增可配置的名称匹配列表,后续调整筛选条件仅需修改顶部
allowedNames变量,无需改动逻辑代码 - 新增D列筛选逻辑,默认保留源表表头,仅保留D列符合指定值的行
- 新增目标表清空逻辑,每次运行先清除所有旧数据,完全覆盖无残留
- 优化时间戳写入逻辑,根据筛选后的有效行数批量赋值,避免整列无效写入,无需单独调用额外函数
- 复用顶部定义的配置变量,后续修改表格ID、工作表名称仅需调整顶部变量,无需修改逻辑部分
内容的提问来源于stack exchange,提问作者user17017051
相关产品推荐
相关产品推荐

