我使用docs电子表格来管理项目。每行代表一个任务,日期包含在根据日期接近度有条件地格式化的单个单元格中。
我想搜索该颜色,并将出现该彩色单元格的任何行复制到新页面上的一行。
EG。 如果今天=红色,明天=绿色,我希望能够将今天发生的所有任务转移到不同的页面。
这里的任何帮助都会令人惊叹。我感谢可能无法做到:<
答案 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
}