Reputation: 3
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
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