Google Spreadsheets:查找有条件格式的颜色和复制行

时间:2013-03-06 20:22:14

标签: google-apps-script google-sheets

我使用docs电子表格来管理项目。每行代表一个任务,日期包含在根据日期接近度有条件地格式化的单个单元格中。

我想搜索该颜色,并将出现该彩色单元格的任何行复制到新页面上的一行。

EG。 如果今天=红色,明天=绿色,我希望能够将今天发生的所有任务转移到不同的页面。

这里的任何帮助都会令人惊叹。我感谢可能无法做到:<

2 个答案:

答案 0 :(得分:1)

这很容易,在这个论坛上搜索应该会给你带来一些例子......无论如何,这是一种获得它的方法,我选择绿色来测试......你可以很容易地改变/组合更多颜色。 / p>

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
}

注意: 要查看主工作表中的颜色,请查看显示脚本中使用的所有单元格颜色代码的记录器。

答案 1 :(得分: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
}