【问题标题】:How do I find the cell with a certain background color, and set background of different cell in relation to it?如何找到具有特定背景颜色的单元格,并设置与其相关的不同单元格的背景?
【发布时间】:2017-12-18 22:26:51
【问题描述】:

我正在尝试编写一个代码来查找电子表格上的红色单元格,并将其向上移动一个单元格。这是我所拥有的:

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 重新生成了一个。

我做错了什么?

我也主张权利

【问题讨论】:

    标签: javascript if-statement google-apps-script google-sheets comparison-operators


    【解决方案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);
    }
    

    【讨论】:

      【解决方案2】:

      以下比较有错误:

      cell = 'red'
      

      playerfound = false
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 2015-06-02
        • 2017-02-08
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多