如何将Range []转换为整数/类值?

时间:2019-06-20 13:30:37

标签: google-apps-script google-sheets

我正在尝试编写一个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();
}

3 个答案:

答案 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);
  });
}