2013-03-06 71 views
0

我使用文檔電子表格來管理項目。每行表示一項任務,日期包含在根據日期鄰近條件格式化的單個單元格中。Google電子表格:查找有條件格式的顏色並複製行

我想要搜索該顏色並將新顏色單元格出現的行復制到新頁面上的某一行。

例如, 如果今天=紅色,明天=綠色,我希望能夠將今天發生的所有任務拖到不同的頁面。

在這裏的任何幫助將是驚人的。我很欣賞,它可能不可能:<

回答

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 
} 

注:看到的顏色在你的主片,看,顯示所有的腳本中使用的細胞顏色代碼的記錄。

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 
} 
+0

如果有色區域不連續怎麼辦? – 2013-03-07 06:49:54