Loops 搜索值,如果存在值,则添加一行,并在google电子表格中复制数据

Loops 搜索值,如果存在值,则添加一行,并在google电子表格中复制数据,loops,google-apps-script,google-sheets,for-of-loop,Loops,Google Apps Script,Google Sheets,For Of Loop,我想在某一列中搜索一个单词,然后如果该值存在,我想复制下一行及其值,并将该单词更改为两个不同的单词。 我的问题是让找到的单词行号在下面插入一行 function myFunction() { var ss = SpreadsheetApp.openById("1fE404JUbw3aytlqtoht6FfrIhYhTpSe2MM5UDnBkFc4"); var sheet = ss.getSheets()[0] let range = sheet.getDataRange(); var valu

我想在某一列中搜索一个单词,然后如果该值存在,我想复制下一行及其值,并将该单词更改为两个不同的单词。 我的问题是让找到的单词行号在下面插入一行

function myFunction() {
var ss = SpreadsheetApp.openById("1fE404JUbw3aytlqtoht6FfrIhYhTpSe2MM5UDnBkFc4");
var sheet = ss.getSheets()[0]
let range = sheet.getDataRange();
var values = range.getValues();
var typeRange = sheet.getRange("E2:E");
var typeValues = typeRange.getValues();

  var i;
  for(i = 0; i <= lastRow ; i++){
    for (let type of typeValues){
      if (type == "Both"){
        var bothRow = i+1;

      }
////      var bothRow = sheet.getRange(i+1,1,1,typeValues[i].length);
////      ss.insertRowsAfter(bothRow, 1);
    }
  }
}
函数myFunction(){
var ss=电子表格应用程序openById(“1fE404JUbw3aytlqtoht6FfrIhYhTpSe2MM5UDnBkFc4”);
var sheet=ss.getSheets()[0]
let range=sheet.getDataRange();
var values=range.getValues();
var typeRange=sheet.getRange(“E2:E”);
var typeValues=typeRange.getValues();
var i;
对于(i=0;我回答:
.getValues()
返回一个二维值数组,您可以像一维数组一样引用它

代码修复: 您需要更改条件,以便检查的对象是数组:

if (type == "Both"){
//code
}
应该是:

if (type == ["Both"]){
//code
}
添加行并将数据复制到其中: 您可以使用
insertRowsAfter()
在工作表中的给定行之后添加一行,并使用
.getRange().setValues()
复制数据:

for(var i = 0; i <= lastRow ; i++){
  for (let type of typeValues){
    if (type == ["Both"]){
      var bothRow = i + 1;
      ss.insertRowsAfter(bothRow, 1);
      // increment lastRow as there is now one more row in the sheet
      lastRow++;
      // increment i as you want to skip the row you just copied!
      i++;
      var rangeToCopy = sheet.getRange(bothRow + ':' + bothRow).getValues();
      sheet.getRange((bothRow + 1) + ':' + (bothRow + 1)).setValues(rangeToCopy);
    }
  }
}
for(变量i=0;我回答:
.getValues()
返回一个二维值数组,您可以像一维数组一样引用它

代码修复: 您需要更改条件,以便检查的对象是数组:

if (type == "Both"){
//code
}
应该是:

if (type == ["Both"]){
//code
}
添加行并将数据复制到其中: 您可以使用
insertRowsAfter()
在工作表中的给定行之后添加一行,并使用
.getRange().setValues()
复制数据:

for(var i = 0; i <= lastRow ; i++){
  for (let type of typeValues){
    if (type == ["Both"]){
      var bothRow = i + 1;
      ss.insertRowsAfter(bothRow, 1);
      // increment lastRow as there is now one more row in the sheet
      lastRow++;
      // increment i as you want to skip the row you just copied!
      i++;
      var rangeToCopy = sheet.getRange(bothRow + ':' + bothRow).getValues();
      sheet.getRange((bothRow + 1) + ':' + (bothRow + 1)).setValues(rangeToCopy);
    }
  }
}

用于(var i=0;i问题是什么?发生了什么而不是应该发生什么?有错误吗?我注意到它没有进入if条件!问题是什么?发生了什么而不是应该发生什么?有错误吗?我注意到它没有进入if条件!这对我来说很有效,你也可以建议吗关于将数据复制到与条件匹配的行的最后一行?为什么
ss.insertRowsAfter(bothRow,1)
不合适?如果只插入一行,则
ss.insertRowsAfter(bothRow)
应该足够了。无论何时插入,您都需要在lastRow中添加1,否则循环将无法到达工作表的末尾。但我想复制符合条件的行的数据,并将其粘贴到新行。我已更新了我的答案,将其包括在内,很高兴能够提供帮助!这对我有效,您还可以建议复制吗与条件匹配的行的最后一行的数据?为什么
ss.insertRowsAfter(bothRow,1)
不合适?如果只插入一行,则
ss.insertRowsAfter(bothRow)
应该足够了。无论何时插入,您都需要在lastRow中添加1,否则循环将无法到达工作表的末尾。但我想复制符合条件的行的数据并将其粘贴到新行。我已更新了我的答案,将其包括在内,很高兴能够提供帮助!