'Appscript to clear data, Leaving Header (first row) intact
I have a spreadsheet that I would like to create an app script function to clear data/set values from certain cells. It also needs to work up to the last row, as I will be adding many rows. I have something started but it also wipes the header row. I would like, as I say, to be able to reset a bunch of cells however many rows there are, but preserving the header.
code:
function clear() {
var header = SpreadsheetApp.getActive()
.getRangeList(['1:1']);
var rangeList1 = SpreadsheetApp.getActive()
.getRangeList(['I:I', 'J:J','L:L', 'N:N', 'O:O', 'P:P']);
rangeList1.setValue("-");
var rangeList2 = SpreadsheetApp.getActive()
.getRangeList(['C:C', 'D:D', 'G:G', 'H:H', 'M:M', 'R:R', 'S:S', 'T:T']);
rangeList2.setValue(" ");
}
I have a function written that defines ranges based on the columns, some to be reset to '-' some to be reset to ' ' (blank)
The problem is when I run the script the correct values are placed in the correct columns, but the header is also changed. I would like to preserve or protect the header. (script also activated by menu item available in the menu bar btw)
I've tried using .offset but I can't get the syntax correct.
Solution 1:[1]
// clear values in named range - KEEPS HEADERS USED **********
function clear() {
var header = SpreadsheetApp.getActive()
.getRangeList(['1:1']);
var rangeList1 = SpreadsheetApp.getActive()
.getRangeList(['I2:I', 'J2:J','L2:L', 'N2:N', 'O2:O', 'P2:P']);
rangeList1.setValue("-");
var rangeList2 = SpreadsheetApp.getActive()
.getRangeList(['C2:C', 'D2:D', 'G2:G', 'H2:H', 'M2:M', 'R2:R', 'S2:S', 'T2:T']);
rangeList2.setValue(" ");
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Solution 2:[2]
I did it
- getting all the data from the sheet
- checking how many cells exist in this sheet
- getting all cells from the cell just below the header to the last cell
- and finally, clearing all these cells.
function clear(sheet, headerSize = 0) {
const nRows = sheet.getMaxRows(); // number of rows on the sheet
const nColumns = sheet.getMaxColumns(); // number of columns on the sheet
const lastCell = sheet.getRange(nRows, nColumns); // the last cell of this sheet
// get the cells from the row just below the header
// from the first to the last column
const data = sheet.getRange('A' + (headerSize + 1) + ':' + lastCell.getA1Notation());
data.clear();
}
// clear all cells leaving the header (first row) as it is
const sheet = SpreadsheetApp.getActive();
const headerSize = 1;
clear(sheet, headerSize);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Matt Jackson |
Solution 2 | Wesley Gonçalves |