首页 > 解决方案 > 仅复制非空单元格

问题描述

我有这段代码,它从列中复制数据并将其传输到表格底部的另一张表中。这很好用,但问题是它复制了包括空白列在内的整个列。我只想将单元格限制为仅包含数据的单元格。这是代码:

function addTitles() {
  let spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); 
  let sourceSheet = spreadSheet.getSheetByName('Data Entry'); 
  let sourceRange = sourceSheet.getDataRange(); 
  let sourceValues = sourceRange.getValues();
  sourceValues = sourceValues.slice(1).map(row => row.slice(10,10+1));
  let sheetToAdd = spreadSheet.getSheetByName('Cost of Goods'); 

  let rowCount = sourceValues.length;
  let columnCount = sourceValues[0].length;

  let lastRow = sheetToAdd.getLastRow() + 1;

  let targetSheet = spreadSheet.getSheetByName('Cost of Goods');
  let targetRange = targetSheet.getRange(lastRow,1,rowCount,columnCount);
  targetRange.setValues(sourceValues);

  let fillDown = sheetToAdd.getRange(lastRow, 2, lastRow-1, columnCount);
  sheetToAdd.getRange("B4:CV4").copyTo(fillDown);
}

这是样本表:https ://docs.google.com/spreadsheets/d/1AuzIZqIPbnqqZ0VirAOwY--7ISU22tAnc3ojsVwZRn4/edit?usp=sharing

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


问题:

如果我理解正确,您想过滤掉sourceValues具有空字符串作为其值的行(您只是检索一列,因此每行只有一个值),使用filter.

解决方案:

如果是这种情况,您可以替换它:

sourceValues = sourceValues.slice(1).map(row => row.slice(10,10+1));

有了这个:

sourceValues = sourceValues.slice(1).map(row => row.slice(10,10+1))
                           .filter(row => String(row[0]));

参考:


推荐阅读