2012-11-10 30 views
6

Google का उपयोग करके एक परिणाम लौट एप्लिकेशन स्क्रिप्ट और स्प्रेडशीट, मैं एक साधारण बात करने के लिए कोशिश कर रहे हैं लेकिन समस्या को समझ नहीं सकता। मेरे पास एक खाली कॉलम और टेक्स्ट वाला कॉलम वाला शीट है। कॉलम एक दूसरे के बगल में नहीं हैं। मैं एक कॉलम में प्रत्येक सेल में टेक्स्ट खोजने की कोशिश कर रहा हूं, और यदि पाठ मिलता है, तो खाली कॉलम में 'हां' के रूप में सेल का मान सेट करें।खोज स्प्रेडशीट स्तंभ और एक अन्य स्तंभ

उदाहरण (खेद नहीं कोड - मैं दौर चला और घंटे के लिए इसके साथ दौर है, और है कि मैं क्या है तो जटिल है, यह सिर्फ एक उदाहरण प्रदान करने के लिए सबसे अच्छा है):

Column A with text Empty Column F 
abcd efg hij 
klmn opq rstu 
vwxzy     Yes 

क्या सरलतम है 'xyz' के लिए कॉलम ए खोजने के लिए कोड और कॉलम एफ में 'हां' वापस करें?

मैं देखा है और ऑनलाइन एक दर्जन से अलग कोड उदाहरण के बारे में की कोशिश की, और उनमें से किसी को काम नहीं मिल सकता है। इस के साथ किसी भी मदद की सराहना करते हैं!!

संपादित अपने प्रयोग के लिए (उम्मीद अंतिम) (मैं, कुछ बैकएंड उपयोगिताओं कि मुझे स्तंभ शीर्ष लेख नाम के आधार पर संख्या, इस में शामिल नहीं है कि कोड प्राप्त है FYI):

var sskey = SpreadsheetApp.openById('**********************') 

function otherfunction(){ 
    addCustomValue('POCs', 'Groups', 'Champion', 'Champion', 'Yes'); 
} 

function addCustomValue(sheetNamestr, searchColnamestr, writeColnamestr, searchKeystr, writeValstr) { 
    var sheet = sskey.getSheetByName(sheetNamestr); 
    var searchColnum = MyUtilities.getColIndexByName(sheet, 1, searchColnamestr); 
    var writeColnum = MyUtilities.getColIndexByName(sheet, 1, writeColnamestr); 
    var data = sheet.getDataRange().getValues(); 
    for (n=0; n<data.length; ++n) { 
    if (data[n][searchColnum-1].toString().match(searchKeystr)==searchKeystr){ data[n][writeColnum-1] = writeValstr}; 
    } 
    sheet.getRange(1,1,data.length,data[0].length).setValues(data); 
} 

धन्यवाद सर्ज! अब मैं इसे किसी भी कॉलम और शर्तों के आधार पर अपनी स्प्रेडशीट्स पर चला सकता हूं!

+0

सूत्र (एफ 1 में) = arrayformula का उपयोग कर (यदि (ISERROR (FIND ("xyz", एक विचार करें: एक)), "", "हाँ")) – DavidF

+0

tHX @DavidF लेकिन गैस – user1783229

उत्तर

9

यह एक संभावित सरल स्क्रिप्ट है जो आपको चाहिए। (अपने चादर सूत्रों या कस्टम समारोह तो हैं, तो यह ध्यान में रखना संशोधित किया जाना चाहिए)

function test(){ 
var sh = SpreadsheetApp.getActiveSheet(); 
var data = sh.getDataRange().getValues(); // read all data in the sheet 
for(n=0;n<data.length;++n){ // iterate row by row and examine data in column A 
if(data[n][0].toString().match('xyz')=='xyz'){ data[n][5] = 'YES'};// if column A contains 'xyz' then set value in index [5] (is column F) 
} 
Logger.log(data) 
sh.getRange(1,1,data.length,data[0].length).setValues(data); // write back to the sheet 
} 
+0

भयानक - thx! अनुकूलित करने के लिए थोड़ा reworking काम किया लेकिन एक ही बुनियादी संरचना का इस्तेमाल किया। उपरोक्त संपादन देखें। – user1783229

+0

केवल अजीब बात यह है कि स्प्रैडशीट "कार्यरत ..." दिखाती है, भले ही पूरा कार्य समाप्त हो गया हो। मैंने अंत में एक शीट सॉर्ट रखा जो मुझे साबित करने के लिए होता है कि समारोह समाप्त हो गया था। और स्क्रिप्ट पेज ने यह भी संकेत दिया कि फ़ंक्शन समाप्त हो गया है। पता नहीं क्यों स्प्रेडशीट अंतिम प्रकार के बाद भी "काम कर रहा है ..." कहता रहता है। "काम कर रहा है ..." केवल तभी रहता है जब शीट में लगभग 130 पंक्तियां होती हैं, लेकिन जब मैं एक दर्जन पंक्तियों का परीक्षण नहीं कर रहा हूं। अजीब। इससे छुटकारा पाने का एकमात्र तरीका पृष्ठ को रीफ्रेश करना है। – user1783229

+0

इसके बारे में चिंता न करें ... ऐसा कुछ समय होता है जब Google सर्वर 'शीर्ष स्थिति' में नहीं होते हैं ;-) या यदि आपका आईएसपी थक गया है ... –

3
function myFunction() { 
    //Variable to keep track of the sheet 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    //Start at row 1, end at the last row of the spreadsheet 
    for(var i=1;i<sheet.getLastRow();i++){ 
    var value = sheet.getRange(i, 1).getValue(); 
    //Compare the value of the cell to 'xyz', if it is then set column 4 for that row to "Yes" 
    if(value == 'xyz'){ 
     sheet.setActiveRange(sheet.getRange(i, 4)).setValue('Yes'); 
    } 
    } 
} 
+1

साथ चादर सूत्रों में से बचने की कोशिश इस पाश के बजाय शुरू में पूरी श्रृंखला होने का तरीका अपनाने का सुझाव भीतर एपीआई पर कॉल दोहराया बनाता है काम करना, परिणामस्वरूप सरणी के माध्यम से और अंत में मूल्यों को वापस लिखना। इसके अलावा सवाल पाठ कोशिका के भीतर – DavidF

+0

THX सेल के बराबर नहीं सामग्री खोजने के लिए पूछता है - मुझे लगता है कि सर्ज का जवाब बेहतर अनुकूल है - इनपुट की सराहना करते हैं! – user1783229

+0

@ सर्ज इंसस - आपका लगभग काम करता है, लेकिन आप इस तरह के मान सेट नहीं कर सकते हैं जब तक कि कॉलम ए में प्रत्येक सेल में xyz नहीं होता है, साथ ही यह सभी कॉलम के मानों को "NOT_FOUND" के बीच सेट करेगा। – user1795832

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