I want to copy just the values of a specific row to a second sheet to get a summary/archive.
For this reason I need find the last empty row.
I am currently using the following:
function CopyPaste() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var copySheet = ss.getSheetByName("Data");
var pasteSheet = ss.getSheetByName("Summary");
// get source range
var source = copySheet.getRange(20, 1, 20, 5);
// get destination range
var destination = pasteSheet.getRange(pasteSheet.getLastRow() +1, 1, 1, 5);
// copy values to destination range
source.copyTo(destination, {contentsOnly: true});
My problem is that everytime when I run the code, it will insert 7 "empty" rows below the copied row.
I know that they are not really empty and found serveral solutions (below) to solve this issue, but unfortunately i dont get it combined and running.
function getLastDataRow(sheet,col) {
// col in letter
var lastRow = sheet.getLastRow();
var range = sheet.getRange(col + lastRow);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
}
function onOpen(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheetname = ss.getSheets()[0].getName();
// Logger.log("DEBUG: sheetname = "+sheetname)
const sheet = ss.getSheetByName(sheetname);
const values = sheet.getRange('A7:A').getValues();
// const lastRow = values.length - (values.reverse().findIndex(row => !!row[0]));
const firstEmptyRow = values.findIndex(row => !row[0]) + 1;
// const range = sheet.getRange(lastRow,1);
const range = sheet.getRange(firstEmptyRow,1);
sheet.setActiveRange(range);
}
function getLastRow_(sheet, columnNumber) {
// version 1.5, written by --Hyde, 4 April 2021
const values = (
columnNumber
? sheet.getRange(1, columnNumber, sheet.getLastRow() || 1, 1)
: sheet.getDataRange()
).getDisplayValues();
let row = values.length - 1;
while (row && !values[row].join('')) row--;
return row + 1;
}
Try something like this:
function CopyPaste() {
var ss = SpreadsheetApp.getActive();
var sh1 = ss.getSheetByName("Sheet0");
var sh2 = ss.getSheetByName("Sheet1");
var vs1 = sh1.getRange(20, 1, 20, 5).getValues().filter(r => r.some(c => c != ''));
sh2.getRange(sh2.getLastRow() +1, 1, vs1.length, 5).setValues(vs1);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.