Google स्प्रेडशीट कॉलम में विशिष्टता लाने के लिए मजबूर करना


37

मैंने एक Google स्प्रेडशीट (एक डेटाबेस के रूप में कार्य करना) बनाया है जिसमें कई कॉलम हैं, उनमें से एक नाम है, और मैं यह सुनिश्चित करना चाहता था कि नाम फ़ील्ड हमेशा अद्वितीय हो और कोई फ़ील्ड नहीं बनाई जा सकती यदि नाम फ़ील्ड दूसरे के समान हो पंक्ति।

अनिवार्य रूप से मैं एक डेटाबेस के लिए एक प्राथमिक कुंजी बनाना चाहता हूं। क्या किसी को पता है कि Google स्प्रेडशीट में यह कैसे करना है?

यदि यह मदद करता है, तो मैंने Google स्प्रैडशीट (डेटाबेस) के साथ जाने के लिए एक फॉर्म बनाया जो शीट में डेटा दर्ज करेगा और यह सुनिश्चित करना पसंद करेगा कि कोई उपयोगकर्ता पहले से ही सूची में किसी अन्य व्यक्ति के समान नाम दर्ज न करे।


4
ठीक है, यह कहा जाना चाहिए: एक्सेल की तरह, Google स्प्रेडशीट एक डेटाबेस इंजन नहीं है। आप कुछ प्रकार के वास्तविक डेटाबेस बैकएंड पर विचार करना चाह सकते हैं जो इसे सही ढंग से कर सकते हैं। हमारे पास एक्सेल का उपयोग करने वाले लोगों के साथ डेटाबेस के रूप में बहुत खराब अनुभव के 20+ वर्ष हैं, और मुझे यह देखने के लिए नफरत है कि हर किसी को उन सभी पाठों को सीखना होगा। स्प्रेडशीट! = डेटाबेस। इसे सीखो, इसे जियो, इसे प्यार करो।
माइकल कोहेन


2
यदि ठीक से उपयोग किया जाता है तो एक्सेल, टेक्स्ट फाइल्स और रेत में लाइनें एक डेटाबेस हो सकती हैं। उस ने कहा, Google शीट्स की विशाल-मल्टीप्लेयर सुविधा का मतलब है कि इसमें कुछ और डेटाबेस सुविधाओं को जोड़ना एक भयानक उम्मीदवार होगा।
विलियम एंट्रीकेन

जवाबों:


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

यदि आप इसे कॉलम A के लिए डेटा सत्यापन नियम के लिए कस्टम फॉर्मूला के रूप में रखते हैं, तो कॉलम A सभी डुप्लिकेट को अस्वीकार कर देगा।


यह किसी भी पटकथा में शामिल किए बिना डुप्लिकेट को उजागर करने का एक शानदार सरल तरीका है। आपने अभी मेरी सुबह बचाई .. धन्यवाद!
मैथ्यू

3
क्या आप कृपया बता सकते हैं कि सूत्र का क्या अर्थ है? किसलिए A1खड़ा है? A2अगर मेरा डेटा दूसरी पंक्ति में शुरू होता है तो क्या मुझे इसे बदलना चाहिए ?
टॉम ज़ातो - मोनिका

6

मेरे पास एक समाधान नहीं है यदि आप किसी फॉर्म का उपयोग करने पर जोर देते हैं, लेकिन अन्यथा मेरे पास एक बहुत ही सरल समाधान है: मान लीजिए कि अद्वितीय कॉलम ए है। फिर आप A2 पर निम्न डेटा सत्यापन नियम बनाते हैं (शीर्ष लेख के बाद पहला रिकॉर्ड) : =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 से शुरू होती है, तो मैं अपने सिर के ऊपर से याद नहीं रख सकता, इसलिए इस कोड में बग हो सकता है

ऑनडिट सत्यापन की कुंजी अनावश्यक गणना से बचाने के लिए जितनी जल्दी हो सके बाहर निकलना है। किसी फ़ंक्शन से सबसे तेज़ निकास एक खाली रिटर्न स्टेटमेंट है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.