Поиск значения и, если значение существует, добавление строки с копированием данных в электронную таблицу Google - PullRequest
2 голосов
/ 10 апреля 2020

Я хочу найти слово в определенном столбце, а затем, если значение существует, я хочу скопировать приведенную ниже строку с ее значениями и заменить слово на два разных слова. Моя проблема заключалась в получении найденного слова строки Number для вставки строки под ним.

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

Может ли кто-нибудь помочь в достижении требуемого результата, вставив строку ниже и скопировав в нее значения, изменив слово на два слова?

цените это! С уважением, Rahaf

1 Ответ

1 голос
/ 10 апреля 2020

Ответ:

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

Не забудьте увеличить lastRow на 1, если вы добавите новую строку, чтобы ваш l oop все еще доходил до конца листа.

Надеюсь, это вам пригодится!

Ссылки:

Вопросы, связанные с этим:

...