我是Google Script的新手,我被卡住了。
下面的代码运行完美,但循环遍历所有命名范围需要10分钟以上。 它清除细胞的内容,但不清除具有绿色背景的细胞。
function deletNoGreenCells() {
var namedRange = ['HaM','BeM','LoM']
for (var k=0; k<namedRange.length; ++k) {
var range=SpreadsheetApp.getActiveSpreadsheet().getRangeByName(namedRange[k])
for( var i = 1; i < range.getNumRows()+1; ++i){
for(var j = 1; j<range.getNumColumns()+1;++j){
if (range.getCell(i, j).getBackground()!= "#93c47d") {
range.getCell(i, j).clearContent()
}}}}}
我怎样才能更快地获得这个?
干杯!
答案 0 :(得分:1)
感谢Matthew提供致电getBackgrounds
的链接,让我了解这个解决方案:
function deletNoGreenCells() {
var namedRange = ['HaM','BeM','LoM']
for (var k = 0; k < namedRange.length; ++k) {
var range =SpreadsheetApp.getActiveSpreadsheet().getRangeByName(namedRange[k])
var backgrounds = range.getBackgrounds();
for(var i = 0; i < range.getNumRows(); ++i) {
for(var j = 0; j<range.getNumColumns(); ++j) {
if (backgrounds[i][j] != "#93c47d") {
range.getCell(i+1, j+1).clearContent()
}
}
}
}
}
现在只运行5秒钟。谢谢!
答案 1 :(得分:0)
我还没试过这个,但是如果您只是清除非绿色单元格中的数据,那么您可以这样做:
getData
以获取包含所有值的数组getBackgrounds
以获取相应的背景颜色数组setData
,传回已修改的数组用这样的大块读取和写入数据似乎更快。