Google скрипт для поиска и обновления строк в других листах по уникальному идентификатору - PullRequest
1 голос
/ 29 марта 2019

У меня есть около 4 отдельных электронных таблиц, которые принимают пользовательский ввод, и когда пользователь заканчивает, они нажимают кнопку, чтобы «записать» информацию на другом листе.Для всех записей электронной таблицы, введенных пользователем, назначен уникальный идентификатор.

Я пытаюсь сделать следующее: когда пользователь нажимает кнопку, скрипт выполняет поиск на другом листе соответствующего идентификатора и обновляет столбец B доновое значение

По сути, как простой поиск, но вместо возврата значения он обновляется.

Sheet 1                 Sheet 2
    A       B               A       B 
1  ID123 | Received  >   1  ID123 | Ordered
2                        2

Таким образом, когда пользователь меняет ID123 в электронной таблице 1 на Получено, кнопка выполняет поиск ID123 в электронной таблице 2, и, если она существует (так будет всегда), ячейка b1 на листе 2 обновляется со значением вB1 на листе 1.

Я наткнулся на другой пост, рассказывающий о веб-приложении CRUD , но я думаю, что это немного сложнее, чем то, что я хочу сделать здесь!

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Кнопка, которую я упомянул, добавляется через пользовательское изображение, которому будет назначен этот скрипт.

Это может помочь добавить, что на «Стартовом листе» будет только 1 идентификатор.Это «лист назначения», который будет иметь несколько идентификаторов, даже один и тот же идентификатор, повторяющийся несколько раз, и в этом случае все соответствующие идентификаторы должны быть обновлены.

Образец начального листа и Образец листа назначения

Как вы можете видеть выше, в «Начальном листе» ID3 имеет статус «Получено».После нажатия кнопки «Отправить» сценарию потребуется найти «ID3» в «Листе назначения» и заменить любой текст в столбце «Значение» на «Получено».Таким образом, в этом примере ID3 обновляется с «Упорядочено» до «Получено».

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

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

var acRange = SpreadsheetApp.getActiveSheet().getActiveRange();
var val = acRange.getValue();
var row = acRange.getRow();
var col = acRange.getColumn();
var id = acRange
  .getSheet()
  .getRange(row, 1)
  .getValue();
var rg = SpreadsheetApp.getSheetByName('destination sheet name here').getDataRange();
var vA = rg.getValues();
for (var i = 1; i < vA.length; i++) {
  if (vA[i][0] == id) {
    vA[i][col - 1] = val;
    break;
  }
}
rg.setValues(vA);
0 голосов
/ 29 марта 2019

попробуйте это:

function onEdit(e) {
  if(e.range.getSheet().getName() != 'Sheet1'){return;}
  if(e.range.columnStart==2) {
    var id=e.range.offset(0,-1).getValue();
    var rg=e.source.getSheetByName('Sheet2').getDataRange()
    var vA=rg.getValues();
    for(var i=1;i<vA.length;i++) {
      if(vA[i][0]==id) {
        vA[i][1]=e.value;
        break;
      }
    }    
  }
  rg.setValues(vA);
}

Лист1 и Лист2:

enter image description here

Вы можете прикрепить эту функцию к кнопке по желанию:

function updateEntrees() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName('Sheet1');
  var rg1a=sh1.getRange(2,1,sh1.getLastRow()-1,1);
  var vA1a=rg1a.getValues();
  var rg1b=sh1.getRange(2,2,sh1.getLastRow()-1,1);
  var vA1b=rg1b.getValues();
  var sh2=ss.getSheetByName('Sheet2');
  var rg2a=sh2.getRange(2,1,sh2.getLastRow()-1,1);
  var vA2a=rg2a.getValues();
  var rg2b=sh2.getRange(2,2,sh2.getLastRow()-1,1);
  var vA2b=rg2b.getValues();
  for(var i=0;i<vA1a.length;i++) {
    for(var j=0;j<vA2a.length;j++) {
      if(vA1a[i][0]==vA2a[j][0]) {
        vA2b[j][0]=vA1b[i][0]
      }
    }
  }
  rg2b.setValues(vA2b);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...