0

プロジェクトを管理するためにドキュメントスプレッドシートを使用しています。各行はタスクを表し、日付は日付の近接度に従って条件付きでフォーマットされた単一のセルに含まれます。

その色を検索し、その色のセルが出現する行を新しいページの行にコピーしたいと思います。

例えば。今日=赤、明日=緑の場合、今日発生するすべてのタスクを別のページに移動できるようにしたいと思います。

ここでの助けは素晴らしいでしょう。それが不可能かもしれないことを感謝します:<

4

2 に答える 2

1

これは非常に簡単で、このフォーラムで検索するといくつかの例が表示されるはずです...とにかく、これを取得する方法です。テストするために緑を選択しました...より多くの色を簡単に変更/組み合わせることができます。

function copyGreenRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var colors = sh.getDataRange().getBackgrounds();// get the colors
  var data =  sh.getDataRange().getValues(); // get corresponding data
  var datatoCopy = [];
  Logger.log(colors);
  for(var c in colors){
  var rowcolors = colors[c].toString();
    if(rowcolors.indexOf('#00ff00')!=-1){ // check if this color is in this row
      datatoCopy.push(data[c]);// if so, copy the data to an array
      }
      }
var newsheet = ss.insertSheet().getRange(1,1,datatoCopy.length,datatoCopy[0].length).setValues(datatoCopy);// bulk write to the new sheet
}

注: メインシートの色を確認するには、スクリプトで使用されているすべてのセルのカラーコードを表示するロガーを確認してください。

于 2013-03-06T20:47:07.660 に答える
0

上記の投稿には同意しますが、データはすでに配列であるため、必要以上の作業を実行しています。代わりに、「getValues()」を使用したときに作成した「データ」配列からそれらを削除してください。不要な配列を作成していないため、これにより少し時間を節約できます。

function copyGreenRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var colors = sh.getDataRange().getBackgrounds();// get the colors
  var data =  sh.getDataRange().getValues(); // get corresponding data
  Logger.log(colors);
  for(c=0 ; c< data.length; ++c){
  var rowcolors = colors[c].toString();
    if(rowcolors.indexOf('#00ff00') !=-1){ // check if this color is not present
     continue; //if it is  the color we want move along
      }
else
{
 data.splice(c,1); //Remove it from our array
}
    }
var newsheet = ss.insertSheet().getRange(1,1,data.length,data[0].length).setValues(data);
// bulk write to the new sheet
}
于 2013-03-07T01:24:38.523 に答える