60409


お世話になります。  
以下のプログラムは私が初めて書いたGASのプログラムです。  
やりたいことは、スプレッドシートで、各行において、一番左のセルの背景色に、その行全体の背景色を合わせるというものです。

[code]

    function colorAsLeft(){
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var lastrow = sheet.getLastRow();
      var lastcol = sheet.getLastColumn();
      var savedColor = "black";
      for (var row = 1; row <= lastrow; row++) { 
        var currColor = sheet.getRange(row, 1).getBackground();
        Logger.log("row=%s", row);
        Logger.log("before savedColor=%s currColor=%s", savedColor, currColor);
        // if (currColor != "white") { # NG
        // if (currColor != "#FFFFFF") { # NG
        if (currColor != "#ffffff") { #OK
          savedColor = currColor;
          Logger.log("in if savedColor=%s currColor=%s", savedColor, currColor);
        }
        Logger.log("savedColor=%s currColor=%s", savedColor, currColor);
        sheet.getRange(row, 1, 1, lastcol).setBackground(savedColor);
      }
    }
    
[/code]

上のようにすると、if文でcurrColor（現在行の先頭セルの色）を"#ffffff"と比較するとうまくいく（currColorが白でないときのみifブロックに入る）が、"white"や"#FFFFFF"と比較するとうまくいきません（必ずブロックに入ります。）。  
なぜでしょうか。  
私としては読みやすい"white"にしたいです。  
よろしくお願いします。


CC BY-SA 4.0
2019-11-07T02:08:32.843
60307
2019-11-11T07:20:48.420
26673
question
google-apps-script
GASでif (foo != "white") { bar; } とするとfooが白くてもbarが実行される


APIの結果がどんな形式なのかはAPIを提供する側(この場合はGoogle)が決めることなので、質問者さんが`"white"`がいいと思ってもどうしようもありません。結果の形式を指定するAPIもないようですし。

こういった場合にコードの可読性を改善するには、定数のシンボルを用意するのが普通です。

[code]

    const WHITE = "#ffffff";
    ...
        if (currColor != WHITE) {
          ...
    
    
[/code]


CC BY-SA 4.0
2019-11-11T07:20:48.420
60409
2019-11-11T07:20:48.420
3475
60307
answer