Google Script:清除具有特定背景的细胞内容(减慢速度)

时间:2017-01-23 21:08:52

标签: javascript if-statement for-loop background cell

我是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()
 }}}}}

我怎样才能更快地获得这个?

干杯!

2 个答案:

答案 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)

我还没试过这个,但是如果您只是清除非绿色单元格中的数据,那么您可以这样做:

  1. 在范围内调用getData以获取包含所有值的数组
  2. 在范围内调用getBackgrounds以获取相应的背景颜色数组
  3. 使用backgrounds数组更新数据数组,消隐要清除的元素
  4. 在范围内调用setData,传回已修改的数组
  5. 用这样的大块读取和写入数据似乎更快。