Google 用于删除包含部分关键字的行的 Apps 脚本
Google Apps Script for Removing Rows Containing Part of a Keyword
我想删除 Google 工作表中包含员工、测试、不相关提交和重复条目的行。 我的代码需要是独立的,这样才能在我的工作场所使用。
具体来说,我想:
删除包含属于特定组织的电子邮件地址的任何行(例如:以@domainname.com 结尾的任何电子邮件地址)。我一直在使用一段代码来删除包含属于我同事的三个特定电子邮件地址的行,但我希望找到一种方法来一次性删除所有员工,而无需在每封电子邮件中进行编码。这是我一直在使用的代码:
function delVtlEm() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[1] == 'isaac@domainname.com' ||
row[1] == 'danni@domainname.com' ||
row[1] == 'georgia@domainname.com') {
sheet.deleteRow((parseInt(i) + 1) - rowsDeleted);
rowsDeleted++;
}
}
}
从评论部分删除任何包含单词 "login" 的行,其中 "login" 可能只是该列中副本的一部分。例如,有人可能会填写“联系我们”表格并在评论部分寻求有关其登录信息的帮助——但这不是我的目的的合格线索。他们的消息可能是 "Hey, can you help me with my login?" 或其他一些类似的措辞,这就是为什么我想删除任何包含 "login" 的行。
如果您有任何想法或建议的代码,请告诉我!
您可以使用 indexOf('what to find')
来查找部分字符串。另外,不要单独删除 Sheet 中的行。那是低效的。从数组中删除元素(行),清除 sheet 选项卡,然后设置所有新值。
function delVtlEm() {
var i,row;
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
var arrayOfStringsToFind = ["whatToLookFor","whatToLookFor2","whatToLookFor3"];
for (i = 0; i <= numRows - 1; i++) {
row = values[i];
column1Value = row[0];//Get the value of column A for this row
column2Value = row[1];
column3Value = row[2];
if (arrayOfStringsToFind.indexOf('column1Value') !== -1) {
values.splice(i,1);//
}
if (column2Value.indexOf('@vtldesign.com') !== -1) {
values.splice(i,1);//Remove one element in the data array at index i
}
if (column3Value.indexOf('whatToLoookFor') !== -1) {
values.splice(i,1);//
}
}
sheet.clearContents();//clear the contents fo the sheet
sheet.getRange(1, 1, values.length, values[0].length);//Set new values
}
我根据您的代码实现了以下smartDelete()
功能。
这个函数可以让你实现以下,
- 识别任意数量的域(在
badDomains
数组中)以删除其对应的行。
- 识别任意数量的单词(在
badWords
数组中)以删除其对应的行。
- 以上两个搜索条件均不区分大小写;您可以通过将正则表达式修饰符(存储在
regExpModifiers
中)更改为 ""
或 Null
. 来更改它
- 可以对三个不同的列执行上述操作(存储在
fnameColumnNumber
、emailColumnNumber
和 companyColumnNumber
中)
如果您遇到任何问题或有任何反馈,请告诉我。
function smartDelete() {
// smartDelete settings goes here,
var badDomains = ["vtldesign\.com", "parterreflooring\.com"];
var badWords = ["Vital", "Parterre", "test"];
var fnameColumnNumber = 0;
var emailColumnNumber = 1;
var companyColumnNumber = 3;
var regExpModifiers = "i";
// Gain access data in the sheet
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
var deleteAction = false;
// delete procedure
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
deleteAction = false;
// check bad words
for (var j = 0; j <= badWords.length - 1; j++) {
var myPattern = new RegExp(badWords[j], regExpModifiers);
var status = row[fnameColumnNumber].toString().match(myPattern);
if (status) {
// match found, mark this row for delete
deleteAction = true;
break;
};
};
// check bad domains
for (var j = 0; j <= badDomains.length - 1; j++) {
var myPattern = new RegExp(badDomains[j], regExpModifiers);
var status = row[emailColumnNumber].toString().match(myPattern);
if (status) {
// match found, mark this row for delete
deleteAction = true;
break;
};
};
// check bad words
for (var j = 0; j <= badWords.length - 1; j++) {
var myPattern = new RegExp(badWords[j], regExpModifiers);
var status = row[companyColumnNumber].toString().match(myPattern);
Logger.log(status)
if (status) {
// match found, mark this row for delete
deleteAction = true;
break;
};
};
// execute delete.
if (deleteAction) {
sheet.deleteRow((parseInt(i) + 1) - rowsDeleted);
rowsDeleted++;
};
};
}
我想删除 Google 工作表中包含员工、测试、不相关提交和重复条目的行。 我的代码需要是独立的,这样才能在我的工作场所使用。
具体来说,我想:
删除包含属于特定组织的电子邮件地址的任何行(例如:以@domainname.com 结尾的任何电子邮件地址)。我一直在使用一段代码来删除包含属于我同事的三个特定电子邮件地址的行,但我希望找到一种方法来一次性删除所有员工,而无需在每封电子邮件中进行编码。这是我一直在使用的代码:
function delVtlEm() { var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getDataRange(); var numRows = rows.getNumRows(); var values = rows.getValues(); var rowsDeleted = 0; for (var i = 0; i <= numRows - 1; i++) { var row = values[i]; if (row[1] == 'isaac@domainname.com' || row[1] == 'danni@domainname.com' || row[1] == 'georgia@domainname.com') { sheet.deleteRow((parseInt(i) + 1) - rowsDeleted); rowsDeleted++; } } }
从评论部分删除任何包含单词 "login" 的行,其中 "login" 可能只是该列中副本的一部分。例如,有人可能会填写“联系我们”表格并在评论部分寻求有关其登录信息的帮助——但这不是我的目的的合格线索。他们的消息可能是 "Hey, can you help me with my login?" 或其他一些类似的措辞,这就是为什么我想删除任何包含 "login" 的行。
如果您有任何想法或建议的代码,请告诉我!
您可以使用 indexOf('what to find')
来查找部分字符串。另外,不要单独删除 Sheet 中的行。那是低效的。从数组中删除元素(行),清除 sheet 选项卡,然后设置所有新值。
function delVtlEm() {
var i,row;
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
var arrayOfStringsToFind = ["whatToLookFor","whatToLookFor2","whatToLookFor3"];
for (i = 0; i <= numRows - 1; i++) {
row = values[i];
column1Value = row[0];//Get the value of column A for this row
column2Value = row[1];
column3Value = row[2];
if (arrayOfStringsToFind.indexOf('column1Value') !== -1) {
values.splice(i,1);//
}
if (column2Value.indexOf('@vtldesign.com') !== -1) {
values.splice(i,1);//Remove one element in the data array at index i
}
if (column3Value.indexOf('whatToLoookFor') !== -1) {
values.splice(i,1);//
}
}
sheet.clearContents();//clear the contents fo the sheet
sheet.getRange(1, 1, values.length, values[0].length);//Set new values
}
我根据您的代码实现了以下smartDelete()
功能。
这个函数可以让你实现以下,
- 识别任意数量的域(在
badDomains
数组中)以删除其对应的行。 - 识别任意数量的单词(在
badWords
数组中)以删除其对应的行。 - 以上两个搜索条件均不区分大小写;您可以通过将正则表达式修饰符(存储在
regExpModifiers
中)更改为""
或Null
. 来更改它
- 可以对三个不同的列执行上述操作(存储在
fnameColumnNumber
、emailColumnNumber
和companyColumnNumber
中)
如果您遇到任何问题或有任何反馈,请告诉我。
function smartDelete() {
// smartDelete settings goes here,
var badDomains = ["vtldesign\.com", "parterreflooring\.com"];
var badWords = ["Vital", "Parterre", "test"];
var fnameColumnNumber = 0;
var emailColumnNumber = 1;
var companyColumnNumber = 3;
var regExpModifiers = "i";
// Gain access data in the sheet
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
var deleteAction = false;
// delete procedure
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
deleteAction = false;
// check bad words
for (var j = 0; j <= badWords.length - 1; j++) {
var myPattern = new RegExp(badWords[j], regExpModifiers);
var status = row[fnameColumnNumber].toString().match(myPattern);
if (status) {
// match found, mark this row for delete
deleteAction = true;
break;
};
};
// check bad domains
for (var j = 0; j <= badDomains.length - 1; j++) {
var myPattern = new RegExp(badDomains[j], regExpModifiers);
var status = row[emailColumnNumber].toString().match(myPattern);
if (status) {
// match found, mark this row for delete
deleteAction = true;
break;
};
};
// check bad words
for (var j = 0; j <= badWords.length - 1; j++) {
var myPattern = new RegExp(badWords[j], regExpModifiers);
var status = row[companyColumnNumber].toString().match(myPattern);
Logger.log(status)
if (status) {
// match found, mark this row for delete
deleteAction = true;
break;
};
};
// execute delete.
if (deleteAction) {
sheet.deleteRow((parseInt(i) + 1) - rowsDeleted);
rowsDeleted++;
};
};
}