0

我正在嘗試編寫一個可以刪除具有綠色背景的行的Google表格腳本。如果在Google表格中標記爲綠色後的15分鐘內刪除了一行

更詳細的解釋:

我有一個谷歌片表,其中:

  • 第一行表示列的名稱(3)
  • 以下所有行表示一些3 - 列數據

我需要做的事:

當電子表格中的任何行(除第一個)被更改爲具有綠色背景時,應啓動該功能,最終將刪除綠色行的所有數據並將其背景重新設置爲白色。

什麼我迄今所做的:

我應該返回範圍的背景顏色的十六進制值的函數:

function getHexValue(range) { 
    return SpreadsheetApp.getActiveSheet().getRange(range).getBackground(); 
} 

我有一個返回true功能如果輸入的十六進制值爲綠色:

function isGreen(color) { 
    return ["#b6d7a8", "#d9ead3", "#93c47d", "#6aa84f", "#38761d", "#274e13"].some(function(el) { return color === el; }); 
} 

我也嘗試循環遍歷範圍並檢查背景色以下列方式:

var ss = SpreadsheetApp.getActiveSheet(); 
    var range = ss.getRange('A2:C'); 
    var numRows = range.getNumRows(); 


    for (var i = 1; i < numRows; ++i) { 

    Logger.log(getHexValue(ss.getRange(i, 1))); 
    } 

不過,我不斷收到「無效座標或範圍大小」例外,因此,無法前進。此外,谷歌提示我在循環中使用getRange函數不是一個好主意,並且會顯着減慢腳本執行速度。


如何以正確的方式處理我的任務?

回答

1

以下是如何找到綠色。通常,我喜歡一次獲取所有數據。這就是爲什麼我使用getDataRange()很多。一旦數據在數組中,您可以快速瀏覽數據。唯一的技巧是輸出。請記住,數據是在二維數組中。所以如果你沒有使用所有的數組來設置值,你可能不得不使用數組本身來幫助你爲setValues()命令設置正確的大小範圍。

function findGreenRow() 
{ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getActiveSheet(); 
    var rg=sh.getDataRange(); 
    var cA=rg.getBackgrounds(); 
    var gA=[]; 
    var green='#00ff00' 
    for(var i=1;i<cA.length;i++) 
    { 
     if(cA[i][0] == green && cA[i][1] == green && cA[i][2]==green) 
     { 
     gA.push(sh.getRange(i+1,1,1,3).getA1Notation()); 
     } 
    } 
    Logger.log(gA); 
    return gA 
} 

這是一個可能的開始,以一個更完整的解決方案。它具有用於電子表格的菜單,因此您可以從電子表格中運行它,並在文本區域中顯示行範圍,並向您展示如何使用withSuccessHandler進行回調。

FindGreenRows.html

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script> 
     function findGreen() 
     { 
     google.script.run 
      .withSuccessHandler(dispGreenRanges) 
      .findGreenRows(); 
     } 
     function dispGreenRanges(gA) 
     { 
     $('#txt1').val(gA.join(',')); 
     } 
    </script> 
    </head> 
    <body> 
    <div id="div1"> 
     <textarea id="txt1" rows="4" cols="35"></textarea> 
     <br /><input id="btn0" type="button" value="Find Green" title="Find green rows." onClick="findGreen();" /> 
    </div> 
    </body> 
</html> 

代碼。gs

function findGreenRows() 
{ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getActiveSheet(); 
    var rg=sh.getDataRange(); 
    var cA=rg.getBackgrounds(); 
    var gA=[]; 
    var green='#00ff00'; 
    for(var i=1;i<cA.length;i++) 
    { 
     if(cA[i][0] == green && cA[i][1] == green && cA[i][2]==green) 
     { 
     gA.push(sh.getRange(i+1,1,1,3).getA1Notation()); 
     } 
    } 
    Logger.log(gA); 
    return gA 
} 

function showGreenDialog() 
{ 
    var ui=HtmlService.createHtmlOutputFromFile('FindGreenRows'); 
    SpreadsheetApp.getUi().showModelessDialog(ui, 'Find Green'); 
} 

function makeGreenMenu() 
{ 
    SpreadsheetApp.getUi().createMenu('The Green Menu') 
    .addItem('Find Green', 'showGreenDialog') 
    .addToUi(); 
} 
相關問題