0

因此,如果该正则表达式匹配一个值(此处为'/ exe'),那么该脚本将删除行。我希望将另一个表格中的整个列(A2:A)的值传递给regex变量,以便在Sheet2中比较和删除所有值。 Anyhelp将被曝光。将值的列范围传递给Apps脚本中的变量

SAMPLE SHEET HERE

function deleteRows() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Sheet2"); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    var toDelete = []; 

var re = new RegExp('/exe'); 
    for (var row = 0; row < values.length; row++) { 
    for(var column = 0;column<values[row].length;column++){ 
    if (re.exec(values[row][column])){ 
    toDelete.push(row); } } } 


    for(var deleteRow = toDelete.length-1; deleteRow >= 0;deleteRow--){ 
    sheet.deleteRow(toDelete[deleteRow]+1); 
    } 

    SpreadsheetApp.flush(); 
}; 

回答

1

您可以在regexy的方式将它们连接起来。 删除的行内可以添加

var pattern = "(" + ss 
    .getSheetByName("Sheet1") 
    .getDataRange() 
    .getValues() 
    .map(function(row) {return row[0];}) 
    .filter(function(row, rowI) {return rowI > 0 && row !== "";}) 
    .join("|") + ")"; 

后者从Sheet1中的数据来看,提取第一列作为一个数组,去除头和空行,并与连接它们|,最后我们把它包在括号。

然后你可以var re = new RegExp(pattern);

+0

哇..完美的作品:) – rockinfreakshow

+0

什么是过滤器函数中的rowI? – Cooper

+0

row是当前元素,rowI是数组中的索引(就好像您正在执行for(var rowI = 0; ...)') –