Tengo este código que copia los datos de una columna y los transfiere a otra hoja en la parte inferior de la tabla. Esto funciona bien, pero el problema es que copia toda la columna, incluida la que está en blanco. Solo quiero limitar las celdas que se copiarán a celdas solo con datos. Aquí está el código:
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); }Aquí está la hoja de muestra: https://docs.google.com/spreadsheets/d/1AuzIZqIPbnqqZ0VirAOwY--7ISU22tAnc3ojsVwZRn4/edit?usp=sharing
Si lo entiendo correctamente, desea filtrar las filas de sourceValues que tienen una cadena vacía como valor (solo está recuperando una columna, por lo que cada fila solo tiene un valor), usando filter .
Si ese es el caso, podría simplemente reemplazar esto:
sourceValues = sourceValues.slice(1).map(row => row.slice(10,10+1));Con este:
sourceValues = sourceValues.slice(1).map(row => row.slice(10,10+1)) .filter(row => String(row[0]));