Google工作表删除具有特定背景颜色的单元格



我正试图让这个函数在Apps脚本中工作,但对于我的生活,我似乎找不到问题。

我在工作表的一列中突出显示了一系列单元格。我想删除这些单元格中的所有内容,而不是删除行。

到目前为止我写的是:

function clearGreen() {
var ss    = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getDataRange();
var bgColors = range.getBackgrounds();
for (var i=0; i<bgColors.length; i++) {
for (var j=0; j<bgColors[i].length; j++) {
if (bgColors[i][j] === '#D9E9D3') {
range.getCell(i+1,j+1).clearContent();
}
}
}  
}

调试时返回的错误如下:

TypeError: Cannot read property 'getSheets' of null
clearGreen  @ Code.gs:4

更新:下面的解决方案工作完美,比我的代码快得多。注意:你的工作表需要是你的工作簿中的第一个工作表,我的工作表是59,所以一旦我把它移动到第一个位置,它就会完美地执行。

谢谢!

尝试更改行:

if (bgColors[i][j] === '#D9E9D3') {

:

if (bgColors[i][j].toUpperCase() === '#D9E9D3') {

这样做会更快:

function clearGreen() {
var ss    = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getDataRange();
var bgColors = range.getBackgrounds();
var data = range.getValues()      // <--- get all the data as an array
for (var i=0; i<bgColors.length; i++) {
for (var j=0; j<bgColors[i].length; j++) {
if (bgColors[i][j].toUpperCase() === '#D9E9D3') {
data[i][j] = '';            // <--- change the array
}
}
}
range.setValues(data);            // <--- put the array back on the sheet
}

最新更新