Google Apps Script复制列数据时仅复制非空单元格的实现问题
解决方案
修改后的完整代码如下,调整后即可实现仅复制有数据的非空单元格,同时不会产生多余空白行:
function addTitles() { let spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); let sourceSheet = spreadSheet.getSheetByName('Data Entry'); let sourceRange = sourceSheet.getDataRange(); let sourceValues = sourceRange.getValues(); // 取第11列(索引10)数据,同时过滤掉该列为空的行 sourceValues = sourceValues.slice(1) .map(row => row.slice(10,11)) .filter(row => row[0] !== "" && row[0] != null); let sheetToAdd = spreadSheet.getSheetByName('Cost of Goods'); let rowCount = sourceValues.length; // 无有效数据时直接终止,避免后续逻辑报错 if(rowCount === 0) return; let columnCount = sourceValues[0].length; let lastRow = sheetToAdd.getLastRow() + 1; let targetRange = sheetToAdd.getRange(lastRow,1,rowCount,columnCount); targetRange.setValues(sourceValues); // 调整填充范围的行数为有效数据行数,避免填充多余空白行 let fillDown = sheetToAdd.getRange(lastRow, 2, rowCount, sheetToAdd.getRange("B4:CV4").getNumColumns()); sheetToAdd.getRange("B4:CV4").copyTo(fillDown); }
核心改动说明
- 新增
filter过滤规则:处理完源数据的列切片后,仅保留目标列有实际内容的行,过滤掉空值、null值的行 - 新增空数据校验逻辑:如果过滤后没有符合要求的有效数据,直接终止函数运行,避免调用范围接口时参数异常报错
- 修正填充范围的行参数:原有代码的填充行数为固定值,会出现多填充空白行的问题,现在修改为和有效数据行数一致,确保填充范围和写入的内容匹配
内容的提问来源于stack exchange,提问作者Mr.YJY
相关产品推荐
相关产品推荐

