我正在尝试编写一个App脚本代码,其中每次与CM术语匹配时,都会在其下一行。问题是,“ FindAll”方法返回存在CM的所有范围,而“ getRow”方法无法将所有这些范围转换为“ insertRowsAfter”方法的整数值。
function searchString() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Team Ideas');
var search = "CM"
var textFinder = sheet.createTextFinder(search).findAll();
var row = textFinder.getRow();
sheet.insertRowsAfter(row, 1);
sheet.getActiveRange().offset(sheet.getActiveRange().getNumRows(), 0, 1, sheet.getActiveRange().getNumColumns()).activate();
}
答案 0 :(得分:1)
在工作表中查找所有出现的“ CM”,并在每次出现的下方插入新行。
遍历var textFinder
已创建的数组,并为每个对象创建一行。
function searchString() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Team Ideas');
var search = "CM"
var textFinder = sheet.createTextFinder(search).findAll();
for (i = 0; i < textFinder.length; i++) {
var row = textFinder[i].getRow();
sheet.insertRowAfter(row + i);
}
}
您的var textFinder
已经在创建一个看起来像这样的数组:
[Range, Range, Range, Range]
因此,在新的for
循环中,我们要做的就是遍历此数组中的每个项目(每次出现的“ CM”的范围),并使用insertRowAfter()
在该范围之后插入一行
答案 1 :(得分:1)
这是我使用textFinder findAll()
完成的操作function regexSearch(sObj) {
var ss=SpreadsheetApp.openById(sObj.ssid);
var tf=ss.createTextFinder(sObj.pattern).useRegularExpression(true);
var all=tf.findAll();
var matches='';
for(var i=0;i<all.length;i++) {
matches+=Utilities.formatString('Sheet: %s Cell: %s Row: %s Col: %s Value: %s\n',all[i].getSheet().getName(),all[i].getA1Notation(),all[i].getRow(),all[i].getColumn(),all[i].getValue());
}
if(matches) {
sObj.matches=matches;
}else{
sObj.message(Utilities.formatString('No Matches found for %s',sObj.pattern));
}
return sObj;
}
您会注意到,findAll()方法返回一个范围,您可以从该范围确定工作表,行和列。
答案 2 :(得分:1)
似乎您只需要将textFinder视为对象数组而不是对象即可。您可以从documentation看到findAll()返回一个数组。
以下内容将遍历每个项目并插入空白行。请注意,在执行此操作之前,先将数组反转。这样做是为了保留行所在位置的索引。如果我们从列表中删除,那么我们将不得不在以后的比赛中考虑索引的变化。
尝试一下:
function searchString() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Team Ideas');
var search = "CM"
var textFinder = sheet.createTextFinder(search).findAll();
textFinder.reverse();
textFinder.forEach(function(t){
var row = t.getRow();
sheet.insertRowsAfter(row, 1);
});
}