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 回答