如何使用 Google Sheets App 删除 A 列中不包含特定文本的行?
How to delete rows that do not containing specific text within A column using Google Sheets App?
我是 Google Apps 脚本的新手,如果我的问题多余,我很抱歉。
我正在处理这里脚本的变体:
(这是我一直在编辑的脚本——注意空的 IF 值。)
function onOpen(){
}
function deleteFunction(){
var sheetName = "Title";
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);
var dataRange = sheet.getDataRange();
var numRows = dataRange.getNumRows();
var values = dataRange.getValues();
var rowsDeleted = 0;
for (var i = 2; i <= numRows; i++){
var rowValues = values[i-1].toString();
if (rowValues == ""){
sheet.deleteRow(i - rowsDeleted);
rowsDeleted++;
}
我想删除名为 "Title" 的 sheet 中不包含“| My Text Here”的行。在一串文本中找到文本,例如 "Here is the string of text that could be random | My Text Here"。因此,如果在单元格中找不到“| 我的文本”,我希望删除整行。
我希望它使用的数据集将有大约 10,000 行,我希望这个脚本在 sheet 打开时 运行 或者每天一次。
我已尝试完成这项工作,但我认为我走错了路,因此非常感谢社区的帮助!
如果需要,我可以附上测试 sheet。
提前感谢您的帮助和指导
新脚本:
function main() {
var SS = SpreadsheetApp.getActive();
var SHEET = SS.getSheetByName("Title");
var RANGE = SHEET.getDataRange();
var DELETE_VAL = "| TEST TEXT HERE";
var COL_TO_SEARCH = 0; //Zero is first
var deleteSelectedRows = removeThenSetNewVals();
};
function removeThenSetNewVals(){
var SS = SpreadsheetApp.getActive();
var SHEET = SS.getSheetByName("Title");
var RANGE = SHEET.getDataRange();
var rangeVals = RANGE.getValues();
var DELETE_VAL = "| TEST TEXT HERE";
var COL_TO_SEARCH = 0; //Zero is first
var newRangeVals = [];
for(var i = 0; i < rangeVals.length; i++){
if(rangeVals[i][COL_TO_SEARCH] == DELETE_VAL){
newRangeVals.push(rangeVals[i]);
};
};
RANGE.clearContent();
var newRange =
SHEET.getRange(1,1,newRangeVals.length, newRangeVals[0].length);
newRange.setValues(newRangeVals);
};
}
您的代码需要进行以下修改才能以您希望的方式工作
使用indexOf()。这是一个 Javascript 方法,可让您验证字符串中是否包含子字符串。在您的情况下,它允许您验证“|我的文本在这里”是否包含在 A 列的单元格中。
从结束行到开始行循环 "backwards"。为什么?因为否则删除行会弄乱剩余行的行索引。
function deleteFunction(){
//declarations
var sheetName = "Title";
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
for(var i=values.length-1;i>0;i--){
var myValue=values[i][0];
Logger.log(i);
if( myValue.indexOf("| My Text Here")==-1){
Logger.log(myValue);
sheet.deleteRow(i+1);
}
}
}
我是 Google Apps 脚本的新手,如果我的问题多余,我很抱歉。
我正在处理这里脚本的变体:
(这是我一直在编辑的脚本——注意空的 IF 值。)
function onOpen(){
}
function deleteFunction(){
var sheetName = "Title";
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);
var dataRange = sheet.getDataRange();
var numRows = dataRange.getNumRows();
var values = dataRange.getValues();
var rowsDeleted = 0;
for (var i = 2; i <= numRows; i++){
var rowValues = values[i-1].toString();
if (rowValues == ""){
sheet.deleteRow(i - rowsDeleted);
rowsDeleted++;
}
我想删除名为 "Title" 的 sheet 中不包含“| My Text Here”的行。在一串文本中找到文本,例如 "Here is the string of text that could be random | My Text Here"。因此,如果在单元格中找不到“| 我的文本”,我希望删除整行。
我希望它使用的数据集将有大约 10,000 行,我希望这个脚本在 sheet 打开时 运行 或者每天一次。
我已尝试完成这项工作,但我认为我走错了路,因此非常感谢社区的帮助!
如果需要,我可以附上测试 sheet。
提前感谢您的帮助和指导
新脚本:
function main() {
var SS = SpreadsheetApp.getActive();
var SHEET = SS.getSheetByName("Title");
var RANGE = SHEET.getDataRange();
var DELETE_VAL = "| TEST TEXT HERE";
var COL_TO_SEARCH = 0; //Zero is first
var deleteSelectedRows = removeThenSetNewVals();
};
function removeThenSetNewVals(){
var SS = SpreadsheetApp.getActive();
var SHEET = SS.getSheetByName("Title");
var RANGE = SHEET.getDataRange();
var rangeVals = RANGE.getValues();
var DELETE_VAL = "| TEST TEXT HERE";
var COL_TO_SEARCH = 0; //Zero is first
var newRangeVals = [];
for(var i = 0; i < rangeVals.length; i++){
if(rangeVals[i][COL_TO_SEARCH] == DELETE_VAL){
newRangeVals.push(rangeVals[i]);
};
};
RANGE.clearContent();
var newRange =
SHEET.getRange(1,1,newRangeVals.length, newRangeVals[0].length);
newRange.setValues(newRangeVals);
};
}
您的代码需要进行以下修改才能以您希望的方式工作
使用indexOf()。这是一个 Javascript 方法,可让您验证字符串中是否包含子字符串。在您的情况下,它允许您验证“|我的文本在这里”是否包含在 A 列的单元格中。
从结束行到开始行循环 "backwards"。为什么?因为否则删除行会弄乱剩余行的行索引。
function deleteFunction(){
//declarations
var sheetName = "Title";
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
for(var i=values.length-1;i>0;i--){
var myValue=values[i][0];
Logger.log(i);
if( myValue.indexOf("| My Text Here")==-1){
Logger.log(myValue);
sheet.deleteRow(i+1);
}
}
}