如何用Google Sheets脚本将动态数据范围复制到其他工作表?
解决方法
要实现仅复制MW_DATA范围内的非空白行,你需要先提取数据并过滤掉空行,再将过滤后的数据写入目标工作表,而不是直接复制整个范围。以下是完善后的代码:
function SaveMWData() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const dataSheet = ss.getSheetByName("Games_Log"); // 获取MW_DATA命名范围的引用及对应数据 const mwRange = ss.getRangeByName("MW_DATA"); const mwValues = mwRange.getValues(); // 过滤空行:保留至少有一个非空单元格的行 const filteredData = mwValues.filter(row => row.some(cell => cell !== "")); if (filteredData.length === 0) return; // 没有有效数据时直接退出 // 计算目标写入位置:Games_Log的最后一行+1,从第1列开始 const targetRow = dataSheet.getLastRow() + 1; const targetRange = dataSheet.getRange(targetRow, 1, filteredData.length, filteredData[0].length); // 将过滤后的数据写入目标范围 targetRange.setValues(filteredData); }
关键说明
- 获取命名范围:用
getRangeByName直接获取MW_DATA,避免依赖工作表变量的定义问题。 - 过滤逻辑:
filter结合some方法,确保只保留至少包含一个非空内容的行,适配“有效数据行”的需求。 - 动态写入范围:根据过滤后的数据行数和列数创建目标范围,避免写入多余的空白单元格。
- 边界处理:增加空数据判断,防止在没有有效数据时执行不必要的写入操作。
内容的提问来源于stack exchange,提问作者Aza Remhad
相关产品推荐
相关产品推荐

