Как я могу обновить существующую строку новыми данными с другого листа? - PullRequest
0 голосов
/ 04 октября 2019

У меня есть Google Sheet ( пример здесь ) с двумя листами - Форма и Данные. У меня настроен лист формы, чтобы записи можно было вводить вручную, и после нажатия кнопки ОБНОВИТЬ данные отправляются в конец таблицы данных в виде новой строки, а поля формы очищаются, готовые к следующемуinput.

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

I 'У меня это было настроено и хорошо работало много лет назад в Excel, но Google Sheets - это совершенно новая игра, и мне не удалось найти какую-либо полезную информацию о том, как это может работать с Google Sheets.

Воткод, который отлично работает для добавления новых данных:

function submitData() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Form");
  var datasheet = ss.getSheetByName("Data");

  var values = [[formSS.getRange("B2").getValue(),
                 formSS.getRange("B3").getValue(),
                 formSS.getRange("B4").getValue(),
                 formSS.getRange("B5").getValue()]];

  datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 4).setValues(values);

  formSS.getRange("B2").clearContent(),
  formSS.getRange("B3").clearContent(),
  formSS.getRange("B4").clearContent(),
  formSS.getRange("B5").clearContent();

}

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

1 Ответ

3 голосов
/ 04 октября 2019

Посмотрите, работает ли это

function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("Form");
var dataSheet = ss.getSheetByName("Data");

var values = formSS.getRange("B2:B5").getValues().reduce(function(a, b) {
    return a.concat(b)
});
var partNum = values[0];
var row;
dataSheet.getDataRange().getValues().forEach(function(r, i) {
    if (r[0] === partNum) {
        row = i + 1
    }
})
row = row ? row : dataSheet.getLastRow() + 1;
var data = dataSheet.getRange(row, 1, 1, 4).getValues()[0].map(function (el, ind){
  return el = values[ind] ? values[ind] : el;
  })
dataSheet.getRange(row, 1, 1, 4).setValues([data]);
formSS.getRange("B2:B5").clearContent()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...