Перезапись строк Google листов (для ответа формы), если введен дубликат - PullRequest
0 голосов
/ 25 июня 2018

Итак, я пытался выяснить, как остановить повторяющиеся строки, появляющиеся в моих ответах на листы Google из формы Google.Если найти эту ссылку, которая звучит так, как будто она делает именно то, что я хочу ( Форма Google Script Prevent Duplicates ), но не могу на всю жизнь решить, как отредактировать данный ответ для работы на моем листе.

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

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

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

function updateExisting() {
  var s = SpreadsheetApp.getActiveSheet(),
//      s = ss.getSheetByName(''),
      lastRow = s.getLastRow(),
      lastValues = s.getRange('A'+lastRow+':C'+lastRow).getValues(),
      name = lastValues[0][0],
      allNames = s.getRange('B2:B').getValues(), 
      row, len;

  // TRY AND FIND EXISTING NAME
  for (row = 0, len = allNames.length; row < len - 1; row++)
    if (allNames[row][0] == name) {
      // OVERWRITE OLD DATA
      s.getRange('A2').offset(0, 0, row, 
lastValues.length).setValues([lastValues]);
      // DELETE THE LAST ROW
      s.deleteRow(lastRow);
      break;}
}

1 Ответ

0 голосов
/ 25 июня 2018

Ключевые слова: дубликаты, Google, электронная таблица, листы, форма, отправка, редактирование, строка, уникальный.

Этот код предотвращает дублирование в листе Google при отправке формы Google, перезаписывая существующую строку с помощьюсуществующее уникальное значение, если оно существует.Код ищет один столбец в электронной таблице и ищет совпадение.Я попытался сделать его универсальным, чтобы код не нужно было изменять в зависимости от того, в каком столбце находится уникальный идентификатор. Чтобы сделать его работающим, нужно сделать несколько настроек в разделе «Настройки пользователя».Но это лучше, чем переписывать код.

function updateExisting(columnWithUniqueIdentifier,sheetTabName) {
  var dataFromColumnToMatch,lastColumn,lastRow,rowWithExistingUniqueValue,rowOfDataJustSaved,
      sh,ss,valueToSearchFor;

  // USER SETTINGS - if the values where not passed in to the function
  if (!columnWithUniqueIdentifier) {//If you are not passing in the column number
    columnWithUniqueIdentifier = 2;//Hard code column number if you want
  }

  if (!sheetTabName) {//The sheet tab name was not passed in to the function
    sheetTabName = "Put your Sheet tab name here";//Hard code if needed
  }
  //end of user settings

  ss = SpreadsheetApp.getActiveSpreadsheet();//Get the active spreadsheet - this code must be in a project bound to spreadsheet
  sh = ss.getSheetByName(sheetTabName);

  lastRow = sh.getLastRow();
  lastColumn = sh.getLastColumn();

  //Logger.log('lastRow: ' + lastRow)

  rowOfDataJustSaved = sh.getRange(lastRow, 1, 1, lastColumn).getValues();//Get the values that were just saved

  valueToSearchFor = rowOfDataJustSaved[0][columnWithUniqueIdentifier-1];
  //Logger.log('valueToSearchFor: ' + valueToSearchFor)

  dataFromColumnToMatch = sh.getRange(1, columnWithUniqueIdentifier, lastRow-1, 1).getValues();
  dataFromColumnToMatch = dataFromColumnToMatch.toString().split(",");
  //Logger.log('dataFromColumnToMatch: ' + dataFromColumnToMatch)

  rowWithExistingUniqueValue = dataFromColumnToMatch.indexOf(valueToSearchFor);
  //Logger.log('rowWithExistingUniqueValue: ' + rowWithExistingUniqueValue)

  if (rowWithExistingUniqueValue === -1) {//There is no existing data with the unique identifier
    return;
  }

  sh.getRange(rowWithExistingUniqueValue + 1, 1, 1, rowOfDataJustSaved[0].length).setValues(rowOfDataJustSaved);
  sh.deleteRow(lastRow);//delete the row that was at then end
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...