2017-03-19 96 views
0

我想根據條件刪除某些列。像在此表中 https://docs.google.com/spreadsheets/d/1-P_OkgLeWhWJrOHcmC2sjQVgAoasoRiJ31VnKooHer0/edit?usp=sharing基於某些標題值刪除列Google Apps腳本

需要刪除包含'_confidence'或'_estimatedconfidence'或'_estimatedconfidence準確性'的列。我正在嘗試使用此代碼:

function deleteColumns() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getActiveSheet(); 
var dataRange = sheet.getRange("A1:A20"); 
var data = sheet.getRange("A1:A20"); 
var values = data.getValues(); 
var numRows = values.length; 
var numCols = values[0].length; 

for (var col = numCols-1; col > 0; col--) { 
for (var row = 0; row < numRows; row++) { 
    switch (values[row][col]) {  
    case "_confidence": 
    case "_estimatedconfidence": 
    case "_estimatedconfidence accuracy": 
     sheet.deleteColumn(col+1); 
     continue;      
     break; 
    } 
    } 
} 
} 

我從原始來源修改了此代碼。這個腳本不會返回任何東西。

P.S.我沒有在上面的表格中列出所有列。最多可以有100列進行處理。

+0

var dataRange = sheet.getRange(「A1:A20」); var data = sheet.getRange(「A1:A20」); var values = data.getValues(); ????您從A列測試我們的所有值。 – ScampMichael

+0

每個案例陳述都必須有指示刪除該列。僅寫入最後一種情況的方式(如果爲真)會導致刪除該列。 – ScampMichael

+0

啊是的。 @ScampMichael謝謝,我將(A1:A20)更改爲(A1:H20)並添加了_sheet.deleteColumn(col + 1); _對於每種情況,仍然沒有更改表單。 –

回答

0

我需要首先刪除最大的列,所以在現實生活中,您可能想要將最後一個數組colA從最大到最小排序。但我認爲這會讓你走到你想去的地方。

function deleteColumns() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var dataR = sheet.getDataRange(); 
    var dataA = dataR.getValues(); 
    var colA = []; 
    var re = /(.*_confidence|.*_estimatedconfidence|.*_estimatedconfidence accuracy)/ 
    for (var i = 0; i<dataA.length;i++) 
    { 
    for(var j = 0; j<dataA[i].length;j++) 
    { 
     if(String(dataA[i][j]).match(re) && colA.indexOf(j+1)==-1) 
     { 
     colA.push(j+1); 
     } 
    } 

    } 
    colA.sort(compareNumbers); 
    colA.reverse(); 
    for(var i =0;i < colA.length; i++) 
    { 
    sheet.deleteColumn(colA[i]); 
    } 
} 

function compareNumbers(a, b) { 
    return a - b;// I pulled this function out of the MDN website 
} 

我修改了上面的代碼來排序數字而不是字符串。

+0

如果你只是想列標題,然後打破時,我> 0 – Cooper

+0

謝謝,@cooper。代碼在我共享的工作表上完美運行,但實際上列長度可以達到100.當我嘗試運行帶有更多列(大約100)的代碼時,我得到了_這些列超出了bounds._錯誤。 –

+0

我認爲問題是我的排序是按字母順序排序而不是數字排序。可能必須爲其添加排序功能。對不起,我沒有想到這一點。 – Cooper