iSky
iSky

Reputation: 3

Script of how to add a new row under the new row

So basically I have a macro for adding a new row:

function Row() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('66:66').activate();
  spreadsheet.getActiveSheet().insertRowsAfter(spreadsheet.getActiveRange().getLastRow(), 1);
  spreadsheet.getActiveRange().offset(spreadsheet.getActiveRange().getNumRows(), 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange('D74').activate();

It adds a row after the last one but whenever I use use the macro again, it adds a new row between instead of under the new one.

Also is there a way that it completely copies the format of the previous row ?

Thanks!

Upvotes: 0

Views: 92

Answers (1)

ObsoleteAwareProduce
ObsoleteAwareProduce

Reputation: 756

This inserts a new row after the last one with content, and copies its formatting.

function newRowAfterContent() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.insertRowAfter(sheet.getLastRow());
  sheet.getRange(sheet.getLastRow(), 1, 1, sheet.getLastColumn()).copyFormatToRange(sheet, 1, sheet.getLastColumn(), sheet.getLastRow() + 1, sheet.getLastRow() + 1);
}

For your case with the tables:

function newRowAfterNamedRange() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var namedRangeObj = sheet.getNamedRanges()
    .find((range) => range.getName() == "MyRange");
  var namedRange = namedRangeObj.getRange();
  sheet.insertRowAfter(namedRange.getRow() + namedRange.getHeight() - 1);
  sheet.getRange(namedRange.getRow() + namedRange.getHeight() - 1, namedRange.getColumn(), 1, namedRange.getWidth()).copyFormatToRange(sheet, namedRange.getColumn(), namedRange.getColumn() + namedRange.getWidth() - 1, namedRange.getRow() + namedRange.getHeight(), namedRange.getRow() + namedRange.getHeight());
  namedRangeObj.setRange(sheet.getRange(namedRange.getRow(), namedRange.getColumn(), namedRange.getHeight() + 1, namedRange.getWidth()));
}

Upvotes: 1

Related Questions