如何使用Google Apps Script按列条件跨电子表格导入目标行
谷歌应用脚本(GAS)跨电子表格条件导入实现代码
功能说明
实现需求:先清空目标电子表格所有原有行,再将源电子表格中指定列值为Yes的所有行批量导入到目标表格
修改后完整代码
function copyRowsCrossSpreadsheet() { // 源表格配置,替换为你自己的源表格ID和工作表名称 const sourceSpreadsheet = SpreadsheetApp.openById('15a9...'); const sourceSheet = sourceSpreadsheet.getSheetByName("Sheet1"); const sourceLastRow = sourceSheet.getLastRow(); // 源表无有效数据时直接终止运行 if (sourceLastRow < 2) return; // 批量读取源表所有需要判断的行数据(A到Z列,从第2行开始) const sourceData = sourceSheet.getRange(2, 1, sourceLastRow - 1, 26).getValues(); // 筛选T列值为"Yes"的行(T列是第20列,对应数组索引为19) const filteredRows = sourceData.filter(row => row[19] === "Yes"); // 目标表格配置,替换为你自己的目标表格ID和工作表名称 const destinationSpreadsheet = SpreadsheetApp.openById('1DtL...'); const destinationSheet = destinationSpreadsheet.getSheetByName("Sheet1"); // 清空目标表原有所有内容(如果需要保留表头可自行调整清空范围) destinationSheet.clear(); // 筛选结果不为空时写入目标表 if (filteredRows.length > 0) { const targetRange = destinationSheet.getRange(1, 1, filteredRows.length, filteredRows[0].length); targetRange.setValues(filteredRows); } }
核心修改点说明
- 替换
copyTo方法:copyTo仅支持同一电子表格内的工作表操作,跨表必须使用getValues读取数据、setValues写入数据的方案 - 优化执行效率:不再逐行读取单元格、逐行写入,改为批量读取所有数据后用数组筛选,再一次性写入目标表,避免频繁调用Google服务API导致的超时、运行慢问题
- 补充清空逻辑:新增
destinationSheet.clear()实现需求要求的先清空子表原有内容的操作
自定义调整说明
- 如果判断条件的列不是T列,修改
row[19]的索引值即可(索引从0开始计数,A列对应0,B列对应1,以此类推) - 如果需要保留目标表的表头,将
destinationSheet.clear()替换为删除第2行及之后内容的逻辑即可 - 如果需要导入的列范围不是A-Z,调整
getRange的列数参数即可
内容的提问来源于stack exchange,提问作者JamesReed68
相关产品推荐
相关产品推荐

