使用Google Apps Script实现无空白行跨工作表数据复制
修正后的Google Apps Script代码实现需求
原代码存在几个关键问题导致无法实现需求:
- 语法错误:
getSheet1ByName是笔误,正确写法是getSheetByName,而且目标工作表应该是Sheet1不是"Sheet" - 错误判断空白:直接用Range对象判断
source != ""完全无效,Range对象永远不等于空字符串 - 硬编码行数:固定取6000行不灵活,还会复制大量空白行
- 未过滤空白行:直接复制整个范围,没有剔除空白内容
下面是能实现需求的代码:
function copyInfo() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const copySheet = ss.getSheetByName("Sheet1"); const pasteSheet = ss.getSheetByName("DataDump"); // 获取Sheet1中E列的所有值(从第1行到最后一行有数据的行) const eColumnValues = copySheet.getRange(1, 5, copySheet.getLastRow(), 1).getValues(); // 过滤掉空白行,只保留非空的单元格值 const filteredValues = eColumnValues.filter(row => row[0] !== ""); // 如果有非空数据,就粘贴到DataDump的下一行开始位置 if (filteredValues.length > 0) { const nextRow = pasteSheet.getLastRow() + 1; pasteSheet.getRange(nextRow, 1, filteredValues.length, 1).setValues(filteredValues); } }
代码说明:
- 动态获取E列的数据范围:用
copySheet.getLastRow()代替硬编码行数,只取有数据的部分 - 过滤空白行:用
filter方法剔除值为空的行 - 精准粘贴:计算DataDump的下一行,只粘贴过滤后的非空数据,保证结果是连续无空白的
内容的提问来源于stack exchange,提问作者Gurminder Singh
相关产品推荐
相关产品推荐

