Формування унікальності в стовпці "Електронні таблиці Google"


37

Я створив електронну таблицю Google (яка виступає як база даних), яка містить численні стовпці, ім'я є одним із них, і я хотів переконатися, що поле імені завжди унікальне, і жодне рядок не може бути створений, якщо поле імені збігається з іншим ряд.

По суті, я хочу створити первинний ключ для бази даних. Хтось знає, як це зробити в електронних таблицях Google?

Якщо це допоможе, я створив форму для роботи з електронною таблицею (базою даних) Google, яка буде вносити дані на аркуш і хотіла б переконатися, що користувач уже не вводить те саме ім’я, як хтось інший у списку.


4
Гаразд, про це потрібно сказати: Подібно до Excel, електронні таблиці Google не є двигуном бази даних. Можливо, ви хочете розглянути якийсь справжній сервер бази даних, який міг би зробити це правильно. Ми маємо 20 і більше років дуже поганого досвіду роботи з людьми, які використовують Excel як базу даних, і мені б не хотілося бачити, щоб усі вивчали ці уроки все-таки ПРОТИ. Електронна таблиця! = База даних. Вчіться, живіть, любите.
Майкл Коне


2
Excel, текстові файли та рядки в піску можуть бути базою даних при правильному використанні. Однак, масова багатокористувацька функція Google Таблиць означає, що було б дивним кандидатом додати в неї ще кілька функцій бази даних.
Вільям Ентрікен

Відповіді:


54
=COUNTIF($A:$A,"="&A1)  < 2

Якщо ви помістите це як власну формулу для правила перевірки даних для стовпця A, стовпець A відхиляє всі дублікати.


Це геніально простий спосіб виділити дублікати, не потрапляючи в будь-який сценарій. Ти щойно врятував мій ранок .. дякую!
Метью

3
Не могли б ви пояснити, що означає формула? Що означає A1? Чи потрібно це змінити, A2якщо мої дані починаються з другого ряду?
Томаш Зато - Відновіть Моніку

6

У мене немає рішення, якщо ви наполягаєте на використанні форми, але в іншому випадку у мене дуже просте рішення: Скажімо, що унікальний стовпець - це А. Потім ви створюєте таке правило перевірки даних на A2 (1-й запис після заголовка) : =COUNTIF($A$1:$A$999,A2)<=1. Потім ви копіюєте комірку і вибираєте весь стовпець, клацніть правою кнопкою миші, розгорніть спеціальне підменю вставити та натисніть лише на Вставити дані перевірки . Це воно!


2

Ви вимагаєте протилежного підтвердження даних зі списку. По суті, ви хочете, щоб перевірка даних не вдалася, а не вдалася, якщо значення є в списку. Це неможливо за допомогою перевірки даних, але сценарій може це зробити.

Розглянемо наступний сценарій. Цей скрипт відстежує всі зміни та відкриває вікно повідомлення, коли значення комірки дублює будь-яке інше значення комірки в тому ж стовпці.

function onEdit( event )
{
  // Store the edited sheet.
  var sheet_active = event .source .getActiveSheet() ;

  // Store the edited range.
  var range_active = event .source .getActiveRange() ;

  // Store the row, column, and value of the edited cell.
  var row_edited = range_active .getRow() ;
  var column_edited = range_active .getColumn() ;
  var value_edited = range_active .getValue() ;

  // Store a range consisting of the column containing the edited cell.
  var range_column_edited = sheet_active .getRange(
    1 , column_edited ,
    sheet_active .getMaxRows() , 1
  ) ;

  // Store an array consisting of the values in the column.
  var values_column_edited = range_column_edited .getValues() ;

  // Compare each value to the edited cell.
  for( var r = 0 ; r < values_column_edited .length ; r++ )
  {
    if( r+1 == row_edited ) continue ;
    if( values_column_edited[r] == value_edited )
      Browser .msgBox(
        'value_edited="'
        + value_edited
        + '" values_column_edited['
        + r
        + ']="'
        + values_column_edited[r]
        + '"'
      ) ;
  }
}

Будуть потрібні різні практичні уточнення. Наприклад, ви можете вибрати для моніторингу лише певних стовпців, а також можете зробити додаткові дії, такі як вирівнювання значення комірки. Можливо, вам знадобиться спеціальне поводження з порожніми (відсутніми) значеннями. Але це дає вам основну методику, яка дозволить вам підтвердити.

Оновлення:

Щоб детальніше ознайомитись з оригінальною відповіддю, я подумав, що я би додав кілька перевірок, які я особисто використовую, про які було сказано у відповіді.

// Ось функція, яку я використовую, щоб переконатися, що редагується лише одна комірка.

function isRangeSingleCell(range) {
  if(range.getRow() === range.getLastRow() && range.getColumn() === range.getLastColumn()) { return true; }
}

Для його використання просто пропустіть перевірку, якщо відредаговано більше однієї комірки

if(!isRangeSingleCell(range_active)) { return; }

Ви також можете пропустити перевірку, якщо рядок не перший рядок:

if(range_active.getRowIndex() != 1) { return; }

Примітка. Я не можу згадати верхню частину голови, якщо підрахунок рядків починається з 0 або 1, тому цей код може мати помилку

Ключовим фактором для перевірки onEdit є вихід якомога раніше, щоб врятувати від зайвих обчислень. Найшвидший вихід з функції - це порожнє повернення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.