2012-05-29 16 views
5

मैं कुछ संपूर्ण खोज कर रहा हूं और यह निर्धारित करने की आवश्यकता है कि कोई नया डोमेन (URL) पहले से ही स्प्रेडशीट में है या नहीं। हालांकि, किसी भी स्प्रेडशीट ऑब्जेक्ट में खोज फ़ंक्शन नहीं हैं, अर्थात् findText() अधिकांश दस्तावेज़ ऑब्जेक्ट्स में पाए जाते हैं। मुझे लगता है कि मुझे कुछ महत्वपूर्ण याद आ रहा है। मुझे क्या याद आ रही है?मैं Google स्प्रेडशीट्स को कैसे खोजूं?

findText समारोह: https://developers.google.com/apps-script/class_table#findText

SearchResult वस्तु: https://developers.google.com/apps-script/class_searchresult

स्प्रेडशीट वस्तु: https://developers.google.com/apps-script/class_sheet

मेरे सर्वोत्तम अनुमान कोशिश करते हैं और विशिष्ट स्प्रेडशीट दस्तावेज़ तालिकाओं में पर्वतमाला कन्वर्ट करने के लिए है, तो खोज प्रदर्शन है। मेंडोकुसाई

+0

क्या आप एक और अधिक जानकारी प्रदान कर सकते हैं जैसे कि यह एक स्प्रेडशीट है और कितने चादरों में विशिष्ट कॉलम में यूआरएल खोजा जा सकता है। लेआउट के आधार पर समस्या से संपर्क करने के कई तरीके हैं। किसी दस्तावेज़ में एक तालिका डालना और फिर खोजना संभवतः जाने का सबसे अच्छा तरीका नहीं है। यदि एक से अधिक स्प्रेडशीट, एक ही फ़ोल्डर में सभी स्प्रेडशीट हैं? – ScampMichael

+0

इसके अलावा, क्या आपको यूआरएल के स्थान को जानने की आवश्यकता है यदि यह पाया जाता है या बस यह स्प्रेडशीट में मौजूद है? – ScampMichael

उत्तर

2

मैं अपनी समस्या को हल करने के लिए स्प्रेडशीट सूत्रों का उपयोग करके समाप्त हुआ। विशेष रूप से, मैंने MATCH() फ़ंक्शन का उपयोग किया, जो एक सरणी में एक स्ट्रिंग को देख सकता है (इस मामले में एक ही दस्तावेज़ में किसी अन्य शीट में एक कॉलम)।

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

हालांकि अन्य सभी प्रतिक्रियाओं की सराहना करें।

4

मैंने एक ग्राफिकल यूजर इंटरफेस के साथ एक खोज उपकरण लिखा जो एकल शीट के 3 कॉलम में वैश्विक खोज करता है। इसे आपकी आवश्यकताओं के अनुरूप आसानी से संशोधित किया जा सकता है। मुझे लगता है कि यूआई में एक एंकर जोड़ने के लिए यह एक अच्छा विचार होगा कि आपको अभी यूआरएल खोलने दें। यहां कोड है, उम्मीद है कि यह आपको अपना खुद का संस्करण तैयार करने में मदद करेगा।

संपादित करें: मैं जोड़ा नीचे कोड में लंगर विजेट

// G. Variables 
var sh = SpreadsheetApp.getActiveSheet(); 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var lastrow = ss.getLastRow(); 
// 
function onOpen() { 
    var menuEntries = [ {name: "Search GUI", functionName: "searchUI"}, 
        ]; 
    ss.addMenu("Search Utilities",menuEntries);// custom menu 
} 
// Build a simple UI to enter search item and show results + activate result's row 
function searchUI() { 
    var app = UiApp.createApplication().setHeight(130).setWidth(400); 
    app.setTitle("Search by name/lastname/adress"); 
    var panel = app.createVerticalPanel(); 
    var txtBox = app.createTextBox().setFocus(true); 
    var label=app.createLabel(" Item to search for :") 
    panel.add(label); 
    txtBox.setId("item").setName("item"); 
    var label0=app.createLabel("Row").setWidth("40"); 
    var label1=app.createLabel("Name").setWidth("120"); 
    var label2=app.createLabel("Lastname").setWidth("120"); 
    var label3=app.createLabel("Street").setWidth("120"); 
    var hpanel = app.createHorizontalPanel(); 
    hpanel.add(label0).add(label1).add(label2).add(label3) 
// 
    var txt0=app.createTextBox().setId("lab0").setName("0").setWidth("40"); 
    var txt1=app.createTextBox().setId("lab1").setName("txt1").setWidth("120"); 
    var txt2=app.createTextBox().setId("lab2").setName("txt2").setWidth("120"); 
    var txt3=app.createTextBox().setId("lab3").setName("txt3").setWidth("120"); 
    var hpanel2 = app.createHorizontalPanel(); 
    hpanel2.add(txt0).add(txt1).add(txt2).add(txt3) 
    var hidden = app.createHidden().setName("hidden").setId("hidden"); 
    var subbtn = app.createButton("next ?").setId("next").setWidth("250"); 
    var link = app.createAnchor('', '').setId('link'); 
    panel.add(txtBox); 
    panel.add(subbtn); 
    panel.add(hidden); 
    panel.add(hpanel); 
    panel.add(hpanel2); 
    panel.add(link); 
    var keyHandler = app.createServerHandler("click"); 
    txtBox.addKeyUpHandler(keyHandler) 
    keyHandler.addCallbackElement(panel); 
// 
    var submitHandler = app.createServerHandler("next"); 
    subbtn.addClickHandler(submitHandler); 
    submitHandler.addCallbackElement(panel); 
// 
    app.add(panel); 
    ss.show(app); 
    } 
// 
function click(e){ 
    var row=ss.getActiveRange().getRowIndex();    
    var app = UiApp.getActiveApplication(); 
    var txtBox = app.getElementById("item"); 
    var subbtn = app.getElementById("next").setText("next ?")  
    var txt0=app.getElementById("lab0").setText('--'); 
    var txt1=app.getElementById("lab1").setText('no match').setStyleAttribute("background", "white");// default value to start with 
    var txt2=app.getElementById("lab2").setText(''); 
    var txt3=app.getElementById("lab3").setText(''); 
    var link=app.getElementById('link').setText('').setHref('') 
    var item=e.parameter.item.toLowerCase(); // item to search for 
    var hidden=app.getElementById("hidden")     
    var data = sh.getRange(2,2,lastrow,4).getValues();// get the 4 columns of data 
     for(nn=0;nn<data.length;++nn){ ;// iterate trough 
     if(data[nn].toString().toLowerCase().match(item.toString())==item.toString()&&item!=''){;// if a match is found in one of the 4 fields, break the loop and show results 
      txt0.setText(nn+2); 
      txt1.setText(data[nn][0]).setStyleAttribute("background", "cyan"); 
      txt2.setText(data[nn][1]); 
      txt3.setText(data[nn][2]); 
      link.setText(data[nn][3]).setHref(data[nn][3]); 
      sh.getRange(nn+2,2).activate(); 
      subbtn.setText("found '"+item+"' in row "+Number(nn+2)+", next ?"); 
      hidden.setValue(nn.toString())                     
      break 
      } 
     } 
return app ;// update UI 
} 
function next(e){ 
    var row=ss.getActiveRange().getRowIndex();    
    var app = UiApp.getActiveApplication(); 
    var txtBox = app.getElementById("item"); 
    var subbtn = app.getElementById("next").setText("no other match")  
    var hidden=app.getElementById("hidden");     
    var start=Number(e.parameter.hidden)+1;//returns the last search index stored in the UI 
    var item=e.parameter.item.toLowerCase(); // item to search for 
    var txt0=app.getElementById("lab0"); 
    var txt1=app.getElementById("lab1").setStyleAttribute("background", "yellow"); 
    var txt2=app.getElementById("lab2"); 
    var txt3=app.getElementById("lab3"); 
    var link=app.getElementById('link').setText('').setHref('') 
    var data = sh.getRange(2,2,lastrow,4).getValues();// get the 4 columns of data 
     for(nn=start;nn<data.length;++nn){ ;// iterate trough 
     if(data[nn].toString().toLowerCase().match(item.toString())==item.toString()&&item!=''){;// if a match is found in one of the 4 fields, break the loop and show results 
      txt0.setText(nn+2); 
      txt1.setText(data[nn][0]).setStyleAttribute("background", "cyan"); 
      txt2.setText(data[nn][1]); 
      txt3.setText(data[nn][2]); 
      link.setText(data[nn][3]).setHref(data[nn][3]) 
      sh.getRange(nn+2,2).activate(); 
      subbtn.setText("found '"+item+"' in row "+Number(nn+2)+", next ?");                        
      hidden.setValue(nn.toString())                     
      break 
      } 
     } 
return app ;// update UI 
}// eof 05-12 Serge insas 
8

दुर्भाग्य से स्प्रेडशीट सेवाओं में कोई खोज की कार्यक्षमता है (स्तंभ ई में अपने रेफरी हो रही)। आप जिस श्रेणी को खोज रहे हैं उसके लिए डेटा प्राप्त कर सकते हैं, और उसके बाद एक मैच की तलाश में इसे फिर से चालू कर सकते हैं।

/** 
* Finds a value within a given range. 
* @param value The value to find. 
* @param range The range to search in. 
* @return A range pointing to the first cell containing the value, 
*  or null if not found. 
*/ 
function find(value, range) { 
    var data = range.getValues(); 
    for (var i = 0; i < data.length; i++) { 
    for (var j = 0; j < data[i].length; j++) { 
     if (data[i][j] == value) { 
     return range.getCell(i + 1, j + 1); 
     } 
    } 
    } 
    return null; 
} 
+1

जैसा लगता है उतना दर्दनाक है, यह शायद एकमात्र व्यावहारिक समाधान है। – harvest316

+2

मैंने स्प्रैडशीट्स पर एक खोज फ़ंक्शन के लिए एक सुविधा अनुरोध खोला। [3362] (https://code.google.com/p/google-apps-script-issues/issues/detail?id=3362) – Jacobvdb

1

आप "खोज" कर सकते हैं SpreadsheetAPI सूची फ़ीड क्वेरी पैरामीटर का उपयोग कर: यहाँ एक सरल कार्य है जो कि करता है। यह किसी भी पंक्ति को वापस कर देगा जो पूर्ण शब्द मिलान का उपयोग करके मेल खाता है। अपने पैरामीटर के चारों ओर कुछ तारों को फेंक दें (पाठ्यक्रम के एन्कोड किए गए यूआरएल) और यह वाइल्डकार्ड बन जाता है।

संबंधित मुद्दे