如何找到具有特定背景颜色的单元格,并设置与其相关的不同单元格的背景?

时间:2017-12-18 22:26:51

标签: google-apps-script google-sheets

我正在尝试制作一个代码,在电子表格中找到红色单元格,并将其向上移动一个单元格。这就是我所拥有的:

var ymax = 23;
var xmax = 23;
var playerx = 0;
var playery = 0;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
function moveup(){
findplayer();
sheet.getRange(playerx, playery + 1).setBackground('red');
sheet.getRange(playerx, playery).setBackground('white');
}
function findplayer(){
for(var x = 1; x < xmax; x++)
  for(var y = 1; y < ymax; y++)
  {
    var cell = sheet.getRange( 'a1:z23' ).getCell(x, y).getBackground();
    if(cell = 'red'){
      var playerfound = true;
      playerx = x;
      playery = y;

    }
  }
if (playerfound = false)
{
  findplayer();
  }
 }
 function onOpen() {
 var ui = SpreadsheetApp.getUi();
 ui.createMenu('controol')
   .addItem('up', 'moveup')
   .addToUi();
 }

出于某种原因,不是从T10移动红色方块,而是在W22上新建一个红色方块。

我做错了什么?

我也主张权利

2 个答案:

答案 0 :(得分:1)

这会将红色单元向上移动一个,并在它到达顶部时环绕到底部。

function moveRedCell(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(1,1,20,10);
  var cA=rg.getBackgrounds();
  var changed=false;
  for(var i=0;i<cA.length;i++){
    for(var j=0;j<cA[i].length;j++){
      if(cA[i][j]=='#ff0000' && !changed){
        if(i>0){
           cA[i][j]='#00ff00'; //assume green is default background
           cA[i-1][j]='#ff0000';
        }else{
           cA[i][j]='#00ff00'; //assume green is default background   
           cA[cA.length-1][j]='#ff0000';
        }
        changed=true;
      }
    }
  }
  rg.setBackgrounds(cA);
}

答案 1 :(得分:0)

以下比较有错误:

cell = 'red'
playerfound = false

他们使用JavaScript中的单个等号来为变量赋值,而应使用==(抽象相等)或===(严格相等)。

另一方面,getBackground()返回颜色代码,而不是颜色名称,因此不使用红色#ff0000