You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:18:00