Buộc tính duy nhất trong cột Bảng tính Google


37

Tôi đã tạo một bảng tính Google (hoạt động như một cơ sở dữ liệu) có nhiều cột, tên là một trong số đó và tôi muốn đảm bảo trường tên luôn là duy nhất và không có hàng nào có thể được tạo nếu trường tên giống như một trường khác hàng.

Về cơ bản tôi muốn tạo một khóa chính cho cơ sở dữ liệu. Có ai biết làm thế nào để làm điều này trong Bảng tính Google không?

Nếu nó hữu ích, tôi đã tạo một biểu mẫu đi kèm với Bảng tính Google (cơ sở dữ liệu) sẽ nhập dữ liệu vào trang tính và rất thích đảm bảo người dùng không nhập cùng tên với người khác trong danh sách.


4
OK, điều này cần phải được nói: Giống như Excel, Google Bảng tính không phải là một công cụ cơ sở dữ liệu. Bạn có thể muốn xem xét một số loại phụ trợ cơ sở dữ liệu thực sự có thể làm điều này một cách chính xác. Chúng tôi có hơn 20 năm kinh nghiệm tồi tệ với những người sử dụng Excel làm cơ sở dữ liệu và tôi ghét phải thấy mọi người phải học những bài học đó trên YET LẠI. Bảng tính! = Cơ sở dữ liệu. Học nó, sống với nó, yêu nó.
Michael Kohne


2
Excel, tệp văn bản và dòng trên cát có thể là một cơ sở dữ liệu, nếu được sử dụng đúng cách. Điều đó nói rằng, tính năng nhiều người chơi của Google Sheets có nghĩa là nó sẽ là một ứng cử viên tuyệt vời để thêm một vài tính năng cơ sở dữ liệu trong đó.
William Entriken

Câu trả lời:


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

Nếu bạn đặt công thức này làm Công thức tùy chỉnh cho quy tắc Xác thực dữ liệu cho Cột A, Cột A sẽ từ chối tất cả các bản sao.


Đây là một cách đơn giản tuyệt vời để làm nổi bật các bản sao mà không cần vào bất kỳ kịch bản nào. Bạn vừa cứu buổi sáng của tôi .. cảm ơn!
Matthew

3
Bạn có thể vui lòng giải thích công thức có nghĩa là gì? Không đại diện A1cho cái gì? Tôi có nên thay đổi nó thành A2nếu dữ liệu của tôi bắt đầu ở hàng thứ hai?
Tomáš Zato

6

Tôi không có giải pháp nếu bạn khăng khăng sử dụng một biểu mẫu, nhưng nếu không, tôi có một giải pháp rất đơn giản: giả sử rằng cột duy nhất là A. Sau đó, bạn tạo quy tắc xác thực dữ liệu sau trên A2 (bản ghi đầu tiên sau tiêu đề) : =COUNTIF($A$1:$A$999,A2)<=1. Sau đó, bạn sao chép ô và chọn toàn bộ cột, nhấp chuột phải, mở rộng menu con dán đặc biệt và chỉ nhấp vào Dán xác thực dữ liệu . Đó là nó!


2

Bạn đang yêu cầu ngược lại với xác nhận dữ liệu từ một danh sách. Thực tế, bạn muốn xác thực dữ liệu thất bại, thay vì thành công, nếu giá trị nằm trong danh sách. Điều này là không thể với xác nhận dữ liệu, nhưng một kịch bản có thể làm điều đó.

Hãy xem xét các kịch bản sau đây. Tập lệnh này giám sát tất cả các chỉnh sửa và bật một hộp thông báo khi một giá trị ô trùng lặp với bất kỳ giá trị ô nào khác trong cùng một cột.

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]
        + '"'
      ) ;
  }
}

Sẽ có những tinh chỉnh thực tế khác nhau cần thiết. Ví dụ: bạn có thể chọn chỉ giám sát một số cột nhất định và bạn có thể chọn thực hiện hành động bổ sung, chẳng hạn như xóa hết giá trị ô. Bạn có thể cần xử lý đặc biệt cho các giá trị trống (thiếu). Nhưng điều này cung cấp cho bạn các kỹ thuật cơ bản sẽ cho phép bạn xác nhận.

Cập nhật:

Để giải thích về câu trả lời ban đầu, tôi nghĩ rằng tôi nên thêm một vài xác nhận mà cá nhân tôi sử dụng đã được đề cập trong câu trả lời.

// Đây là một chức năng tôi sử dụng để đảm bảo rằng chỉ có một ô đang được chỉnh sửa.

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

Để sử dụng, chỉ cần bỏ qua xác thực nếu có nhiều hơn một ô được chỉnh sửa

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

Bạn cũng có thể bỏ qua xác thực nếu hàng không phải là hàng đầu tiên:

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

Lưu ý: Tôi không thể nhớ ra khỏi đỉnh đầu nếu việc đếm hàng bắt đầu từ 0 hoặc 1 để mã này có thể có lỗi

Chìa khóa để xác nhận onEdit là thoát càng sớm càng tốt để lưu khỏi tính toán không cần thiết. Lối thoát nhanh nhất từ ​​một hàm là một câu lệnh return rỗng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.