按条件将单元格背景色移除或重置为null或白色

前端开发 2026-07-10

我的函数会在没有错误的情况下运行,并且它会记录新单元格的颜色为白色,或为null(取决于我测试时用的是哪一个),但如果范围内的任意单元格已经是#00ff00,它就不会重置这些单元格的背景颜色。

我该如何调整它,使其实现我想要的效果?

function clearCells() {
  // Get sheet
  var sheet = SpreadsheetApp.getActive().getSheetByName('MM Workout'); 
  // Get 2D array
  var range = sheet.getRange('D9:F157');

  // Get the array of background color in each cell for that range
  var bkg = range.getBackgrounds();

  // iterate over rows 
  for(var i=0;i<bkg.length;i++){
    // iterate over cells
    for(var j=0;j<bkg[i].length;j++){
      // Logger.log(bkg[i][j])
      // if the specific cell at row i and column j is #00ff00
      if(bkg[i][j]==='#00ff00'){
        // remove the background color
        bkg[i][j] = '#ffffff';
        //bkg[i][j] = null;
        Logger.log(bkg[i][j])
      }
    }
  }
}

解决方案

题目中引用的代码把修改后的单元格填充颜色存储在一个数组变量中,但它并没有对这个完成的数组做任何处理,因此单元格的填充颜色永远不会改变。

要把单元格填充颜色设为修改后的数组中的颜色,请使用 Range.setBackgrounds(),如下所示:

function clearCells() {
  const range = SpreadsheetApp.getActive().getRange('MM Workout!D9:F157');
  const fillColors = range.getBackgrounds().map(row => row.map(color =>
    color === '#00ff00' ? '#ffffff' : color
  ));
  range.setBackgrounds(fillColors);
}

请参阅 Range.setBackgrounds()Array.map().

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章