2

私は Google スクリプトを初めて使用するので、この質問が既に回答されている場合は申し訳ありません。

複数のワークシートを含むスプレッドシートがあり、そのうちのいくつかにはステータス列がどこかにあります。

既に見つけたコードを使用すると、ステータス列のセルの値に応じて行全体の色を設定できます。

私が抱えている問題は、コードを単一のシートでしか機能させられないことです。

次のコード (ScampMichael による) は、Status 列の値に基づいて行全体を更新したいのとまったく同じように機能しますが、同じワークブック内の複数のシート (異なる名前) で機能させることはできません。

それぞれが個々のシートを参照するように、編集されたシート名と列番号を持つ個別のスクリプトとしてコードを試しましたが、それでも 1 つのシートのみが更新されます。

このコードを編集する方法、または複数のシートで機能するように複製する方法を教えてください。

function onEdit(e) {

  var statusCol = 2; // replace with the column index of Status column A=1,B=2,etc

  var sheetName = "Services"; // replace with actual name of sheet containing Status

  var cell = e.source.getActiveCell();
  var sheet = cell.getSheet();
  if(cell.getColumnIndex() != statusCol || sheet.getName() != sheetName) return;

  var row = cell.getRowIndex();
  var status = cell.getValue();

  // change colors to meet your needs
  var color;
  switch(status ) {
    case "Down":
      color = "red";
      break;
    case "":
      color = "White";
      break;
    case "Up":
      color = "green";
      break;
  }
  sheet.getRange(row + ":" + row ).setBackgroundColor(color);
}

ありがとうございました。

4

2 に答える 2

1

スプレッドシートには onEdit() 関数を 1 つだけ指定できます。そのため、ワークシートに加えられた編集は、この同じ関数で処理する必要があります。

これを行う 1 つの方法は、statusCol の値をハードコードするのではなく、実行時に取得することです。多くの可能なアプローチのうち、ここでは2つを紹介します

より単純なアプローチ

var statusCols = { 'Sheet1' : 1,
                   'Sheet2' : 2,
                   'Sheet3' : 7  //etc.
                 };


function onEdit(e){
  var cell = e.source.getActiveCell();
  var sheet = cell.getSheet();

  var sheetName = sheet.getName(); 
  var statusCol = statusCols[sheetName];

  /* Whatever code you already have */
}

2番目のアプローチはより用途が広い

function onEdit(e){   
  var cell = e.source.getActiveCell();   
  var sheet = cell.getSheet();
  var headers= sheet.getDataRange().getValues()[0]; //Assuming headers on the first row only   
  var statusCol = headers.indexOf('Status') + 1 ; // Replace Status by the actual column header 
  /* Your existing code here */
}
于 2012-09-11T04:21:12.810 に答える
0

@Srik - ありがとう。

2 番目のアプローチを使用すると、複数のタブで動作する次のコードが得られます。

function onEdit(e){   
  var cell = e.source.getActiveCell();   
  var sheet = cell.getSheet();
  var headers= sheet.getDataRange().getValues()[0]; //Assuming headers on the first row only   
  var statusCol = headers.indexOf('Status') + 1 ; // Replace Status by the actual column header 

  var row = cell.getRowIndex();
  var status = cell.getValue();

  // change colors to meet your needs
  var color;
  switch(status ) {
    case "Down":
      color = "RED";
      break;
    case "Up":
      color = "LIME";
      break;
    case "":
      color = "WHITE";
      break;
  }
  sheet.getRange(row + ":" + row ).setBackgroundColor(color);
}
于 2012-09-11T08:42:46.957 に答える