Добавить строку на основе значения ячейки - Google Script - PullRequest
1 голос
/ 19 сентября 2019

В настоящее время у меня есть этот скрипт, который добавит строку под моим «startRow».Код работает, но он статичен;для целей этого примера моя строка равна 40, потому что я хочу добавить новую строку под содержимым, которое у меня сейчас есть в строке 40.

function addRows(){
  var startRow = 40;
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();

  sheet.insertRowsAfter(startRow , 1);
}

Однако, если бы я вставил строку в свой листвыше строки 40, вышеупомянутое содержимое сместится в строку 41, и я хочу вставить строку под ней, но поскольку этот код статичен, он этого не сделает.

На отдельном листе, вЯчейка A1, я использую функцию =row(), чтобы получить номер той строки, которую я хочу, поскольку это будет динамическим.Если я вставлю строку над ним, число изменится с 40 на 41, сохранив тот же пример.

Я хочу знать, есть ли способ, которым я могу преобразовать этот код в getValue этой ячейки,и вставьте строку под номером строки, указанным в этой ячейке, таким образом, независимо от того, сколько строк вставлено / удалено выше строки 40, она точно будет знать, в какую строку я хочу вставить мою новую строку.

Например, скажем, я вставляю 3 строки выше 40, я хочу, чтобы этот скрипт извлек значение из моей =row() ячейки (A1), которая была бы ("43"), и вставил новую строку под строкой 43.

Заранее спасибо!

РЕДАКТИРОВАТЬ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Чтобы дать дополнительный контекст, почему яДелая это, я создаю электронную таблицу для предложений, каждый раздел оборудования имеет свои собственные проверенные выпадающие данные для продуктов и субпродуктов.

Каждый раздел будет иметь собственную кнопку справа, которая добавит дополнительнуюпозиция (строка) под so в каждый раздел можно добавить больше продуктов, сохраняя при этом валидацию данных в раскрывающемся списке.(Я получил только через 3, когда я понял свою проблему).

Снимок экрана электронной таблицы

Каждый из них работает со своей версией этой функции, первая в startRow = 40, вторая в startRow = 43, третья в startRow = 46.Когда я тестирую любой из скриптов (кнопок) по отдельности, они работают так, как они должны, и добавляют строку.Но, скажем, я запускаю первый сценарий, а затем пробую второй сценарий, он все равно добавит строку после 43, в то время как мне нужно , чтобы добавить до 44, поскольку все было сдвинуто вниз по строке с недавно вставленнымrow.

Вот как выглядит электронная таблица, если я запускаю only вторую кнопку.Это правильно и будет продолжать добавлять строки там, где и должно, так как startRow не изменился и все еще 43.

Пример запуска второй кнопки

Но скажем, что ясначала запустите кнопку, и она вставит строку после строки 40 , а затем Я пробую вторую кнопку, она все равно вставит строку после 43, даже если все было сдвинуто вниз, и мне нужно вставить ее после44 теперь, чтобы сохранить проверку данных из предыдущего ряда.

Пример кнопки запуска сначала 1, затем 2

Надеюсь, это прояснит причину этого проекта.

Ответы [ 3 ]

1 голос
/ 20 сентября 2019
  • Вы динамически сохраняете номер строки с помощью =row() в отдельной электронной таблице
  • . Вы хотите получить это значение динамически и присвоить его var startRow для insertRowsAfter()
  • getRange ()
  • getValue ()
0 голосов
/ 19 сентября 2019

Ответ обновлен последним элементом.

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

Тогда у вас есть другая функция, которая будет искать раздел по имени и находить последний целл со значением.

Код выглядит так:

function button1(){
  var label = "VIDEO EQUIPEMENT";// For each button specify a function with label to search
  addRow(label);
}

function addRow(label){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//  var sheet = SpreadsheetApp.openById('SHEET_ID').getSheetByName('Sheet2')
  var data = sheet.getDataRange().getValues();
  for (var i = 0 ; i < data.length ; i++) {
    var line = data[i];
    if(line[0] == label){ // we use [0] as it is in column A
      var find = i ;
      break ;
    }
  }

  for (var i = find ; i < data.length ; i++) {
    var line = data[i];

    if(line[0] == ""){
       var lastLine = i ;
      break;
    }else{
      var lastLine = i+1 ;
    }
  }

  Logger.log(lastLine);

  // Then do What you want 
}

Стефан

0 голосов
/ 19 сентября 2019

Вы можете назначить startRow функции скрипта Служб Google, которая называется getLastRow () .Эта функция возвращает позицию последней строки с содержимым.

Пример:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var lastRow = sheet.getLastRow();
Logger.log(lastRow)

Ваш код:

function addRows(){

  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = sheet.getLastRow(); 

  sheet.insertRowsAfter(startRow , 1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...