1

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

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

我使用警报进行检查,它在第 1 行之后插入了无数行。

function myFunction() {
  
  let sheetui= SpreadsheetApp.getUi()
  sheetui.createMenu("Rahaf Game")
  .addItem("Stage 1", 'pop')
  .addToUi();
  
//  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();
}
  function pop(){
  //var ss = SpreadsheetApp.openById("1fE404JUbw3aytlqtoht6FfrIhYhTpSe2MM5UDnBkFc4");
  var sheet = ss.getSheets()[0]
  var typeRange = sheet.getRange("E2:E");
  var typeValues = typeRange.getValues();
  var lastRow = sheet.getLastRow();
  var i;
  for(i = 0; i <= lastRow ; i++){
    for (let type of typeValues){
      if (type == "Both"){
        var bothRow = i+1;
        ss.insertRowsAfter(bothRow, 1);
      }
////      var bothRow = sheet.getRange(i+1,1,1,typeValues[i].length);
////      ss.insertRowsAfter(bothRow, 1);
    }
  }
}

有人可以帮助实现所需的结果,在下面插入一行并将值复制到其中并将单词更改为两个单词吗?

4

1 回答 1

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

如果您添加新行,请不要忘记增加lastRow1,这样您的循环仍会到达工作表的末尾。

参考:

相关问题:

于 2020-04-10T08:02:14.413 回答