[英]How to delete rows if contains a string only in a specific column with spreadsheet script
我的这张电子表格的工作表名为“产品”: https : //docs.google.com/spreadsheets/d/1AflG3VgCFdqz1dRbP0JwGBrc5xXL9kwRBk13yEpekTM/edit#gid=1671517193
我在这里找到了初始脚本:// 如果“列A”单元格包含给定的文本,如何在Google表格中删除行
F列包含我的类别,但是我想删除所有包含if的行,其中包含以下字符串:“ CD”“ MP3”“ Todos”
我希望如果可能的话,请遵循以下条件:1.如果包含整个字符串的一部分,则删除。 例如,如果在该列中看到:“ COMPANY / Income / CD / in”,则脚本将被删除,因为该单元格包含“ CD”
在这里,我的代码无法正常工作,因为删除了一些正确的行。 错误在函数findStringAndDeleteRow中。
var sheetName = "Products";
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);
function onOpen(){
SpreadsheetApp.getUi()
.createMenu('COMPANY')
.addItem('Products Cleaner Data', 'findStringAndDeleteRow')
.addToUi();
}
function findStringAndDeleteRow() {
findStringAndDeleteRow_001();
findStringAndDeleteRow_002();
findStringAndDeleteRow_003();
}
function findStringAndDeleteRow_001() {
var values = sheet.getDataRange().getValues();
for(var i=values.length;i>0;i-=1){
var lcVal=values[i-1][5].toLowerCase() //Change to all lower case
var index = lcVal.indexOf(" cd"); //now you only have to check for contains "glass"
if (lcVal.indexOf(" cd") > -1){
sheet.deleteRow(i)};
}
}
function findStringAndDeleteRow_002() {
var values = sheet.getDataRange().getValues();
for(var i=values.length;i>0;i-=1){
var lcVal=values[i-1][5].toLowerCase() //Change to all lower case
var index = lcVal.indexOf("mp3"); //now you only have to check for contains "glass"
if (lcVal.indexOf("mp3") > -1){
sheet.deleteRow(i)};
}
}
function findStringAndDeleteRow_003() {
var values = sheet.getDataRange().getValues();
for(var i=values.length;i>0;i-=1){
var lcVal=values[i-1][5].toLowerCase() //Change to all lower case
var index = lcVal.indexOf("todos"); //now you only have to check for contains "glass"
if (lcVal.indexOf("todos") > -1){
sheet.deleteRow(i)};
}
}
我希望删除行中包含任何字符串,例如“ CD”,“ MP3”,“ Todos”
您可以在红色中看到需要删除的列。
这是我测试过的完整工作代码,将其链接到电子表格的副本。 我使用了deleteCells()
函数 ,该函数将删除进行匹配的每一行的前7列。
var sheetName = "Products";
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);
function onOpen(){
SpreadsheetApp.getUi()
.createMenu('COMPANY')
.addItem('Products Cleaner Data', 'findAndDelete')
.addToUi();
}
function findAndDelete() {
var findArray = ["CD","MP3","TODOS"];
var rowsDelete = [];
var data = sheet.getRange(2, 5, sheet.getLastRow()-1 ,1).getValues();
for(var i=0; i<data.length; i++) {
var cell = data[i][0].toUpperCase();
var cellArray = cell.split(" / ");
Logger.log(cellArray);
for (var j=0; j<cellArray.length; j++) {
var value = cellArray[j];
if(findArray.indexOf(value) != -1) {
Logger.log(value);
rowsDelete.unshift(2 + i);
break;
}
}
}
for(i=0; i<rowsDelete.length ; i++) {
var position = sheet.getRange(rowsDelete[i], 1, 1, 7);
position.deleteCells(SpreadsheetApp.Dimension.ROWS);
}
}
尝试这个:
function findAndDelete(findArray,searchCol) {
var findArray=findArray||["CD","MP3","Todos"];//default
var searchCol=searchCol||"categories";//default
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet177');
var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
var cObj={};
for(var i=0;i<hA.length;i++) {
cObj[String(hA[i]).toLowerCase()]=i+1;
}
var srg=sh.getRange(2,cObj[searchCol.toLowerCase()],sh.getLastRow()-1,1);
for(var i=0;i<findArray.length;i++) {
var f=srg.createTextFinder(String(findArray[i])).matchCase(true).findAll();
var d=0;
if(f.length>0) {
for(var j=0;j<f.length;j++) {
sh.deleteRow(f[j].getRow()-d++);
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.