2013-09-05 5 views
5

का उपयोग कर लाइव Google फॉर्म में कई विकल्प विकल्पों को गतिशील रूप से संपादित करें। मैं एल.ए. में एक हाईस्कूल शिक्षक हूं, जो ऐप स्क्रिप्ट का उपयोग करके कोर्स पंजीकरण प्रणाली बनाने की कोशिश कर रहा है। मुझे इस पंजीकरण के लिए उपयोग कर रहे Google फॉर्म की आवश्यकता है:ऐप स्क्रिप्ट

प्रश्न 1) छात्र के वर्तमान प्रतिक्रिया विकल्पों के आधार पर नए पृष्ठों पर बाद के कई विकल्प प्रश्नों में उपलब्ध विकल्पों को अपडेट करें।

प्रश्न 2) एक से अधिक विकल्प विकल्प "टोपी" तक पहुंचने पर फ़ॉर्म से विकल्पों को हटा दें।

प्रश्न 1 उदाहरण) एक छात्र कार्यशाला 1 में "टाई-टाईंग" के लिए पंजीकरण करता है, और उसे एक नए पृष्ठ पर ले जाया जाता है। स्क्रिप्ट उस नए पृष्ठ पर उपलब्ध विकल्पों को छात्र की पहली पसंद के आधार पर संपादित करता है, और उस नए पृष्ठ पर संभावित विकल्पों की सूची से "टाई-टाईंग" हटा देता है, इसलिए "शिष्टाचार" उनका एकमात्र शेष विकल्प है।

प्रश्न 2 उदाहरण) छात्र या तो "टाई-टाईंग" या "शिष्टाचार" के लिए पंजीकरण कर सकते हैं, दोनों प्रतिक्रियाएं Google फॉर्म में प्रारंभ में उपलब्ध हैं। 30 छात्र सर्वेक्षण करते हैं, "टाई-टाईंग" कार्यशाला के लिए सभी 30 रजिस्टर। ऐप स्क्रिप्ट प्रतिक्रिया स्प्रैडशीट का संदर्भ देता है, "टाई-टाईंग" कार्यशाला पूर्ण हो जाती है, फिर इसे Google फॉर्म की संभावित विकल्पों की सूची से निकाल देती है। छात्र 31 पंजीकरण करने के लिए जाता है, और उनका एकमात्र विकल्प "शिष्टाचार" है।

यदि मेरा प्रश्न पहले ही पूछा जा चुका है और उत्तर दिया गया है (मेरा विश्वास करो, मैंने खोज की है!) मैं पुनर्निर्देशन की सराहना करता हूं।

उत्तर

3

मेरा मानना ​​है कि हम प्रतिक्रिया के वर्तमान स्थिति के आधार पर बहुत अधिक कठिनाई के बिना अपना दूसरा उद्देश्य प्राप्त कर सकते हैं और फॉर्म को संशोधित कर सकते हैं।

दृष्टिकोण

  1. है फ़ॉर्म बनाएं और उसे एक जवाब स्प्रैडशीट
  2. कि प्रतिक्रिया स्प्रेडशीट में से संबद्ध, एक समारोह (उदाहरण के लिए updateForm) के साथ
  3. बाइंड कि के साथ काम एक स्क्रिप्ट बनाने ऑनफॉर्म सबमिट ईवेंट, Using Container-Specific Installable Triggers देखें।
  4. updateForm समारोह में प्रतिक्रिया का विश्लेषण करें और अपने प्रपत्र फार्म सेवा

का उपयोग कर उदाहरण

function updateForm(e) { 
    if (e.values[1] == 'Yes') { 
    Logger.log('Yes'); 
    var existingForm = FormApp.openById('1jYHXD0TBYoKoRUI1mhY4j....yLWGE2vAm_Ux7Twk61c'); 
    Logger.log(existingForm); 
    var item = existingForm.addMultipleChoiceItem(); 
    item.setTitle('Do you prefer cats or dogs?') 
    .setChoices([ 
     item.createChoice('Cats'), 
     item.createChoice('Dogs') 
     ]) 
    .showOtherOption(true); 
    } 
} 

यह आपकी पहली सवाल है, इसकी और अधिक नाजुक में लक्ष्य को प्राप्त करने की बात आती है के लिए, संशोधित करने, के रूप में फॉर्म मध्य मार्ग जमा नहीं करेगा। एक बहु विकल्प प्रश्न के विभिन्न प्रतिक्रियाओं के आधार पर अलग-अलग पृष्ठों पर जाना संभव है, आपका उपयोग केस इस विधि में फिट हो सकता है, हालांकि यह बहुत गतिशील नहीं है।

आगे पूरी तरह गतिशील अनुभव बनाने के लिए एचटीएमएल सेवा का उपयोग करना संभव है।

मुझे बताएं कि आपको और जानकारी चाहिए या नहीं।

+0

सबमिट पर विकल्प अपडेट करना कैप के नीचे रहने की गारंटी नहीं देता है लेकिन कुछ मामलों के लिए पर्याप्त हो सकता है। –

2

आप Google फॉर्म सेवा का उपयोग करके इस प्रकार के गतिशील रूप को बनाने में सक्षम नहीं हैं, क्योंकि फॉर्म सबमिशन को छोड़कर फॉर्म एंट्री के दौरान सेवा और स्क्रिप्ट के बीच कोई बातचीत नहीं है। बहु-पृष्ठ रूप के मामले में, एक स्क्रिप्ट के पास यह जानने का कोई तरीका नहीं है कि एक छात्र ने एक पृष्ठ पूरा कर लिया है और दूसरे पर चला गया है।

हालांकि, आप इसे HtmlService या UiService का उपयोग करके प्राप्त कर सकते हैं।किसी भी मामले में, आप सर्वर-साइड स्क्रिप्ट के माध्यम से पाठ्यक्रम विकल्पों की अद्यतन सूचियां प्राप्त करने के लिए क्लाइंट-साइड फॉर्म पर भरोसा करेंगे, फिर अगले 'पृष्ठ' को संशोधित करेंगे। यह जटिल होगा।

0

इस प्रश्न का अन्य उत्तर फ़ॉर्म सबमिट करने के लिए प्रत्येक बार एक मल्टीचॉइस चयन जोड़ना जारी रखेगा। के समान दृष्टिकोण का उपयोग करना:

  1. फ़ॉर्म बनाएं और उसे एक जवाब स्प्रैडशीट
  2. कि प्रतिक्रिया स्प्रेडशीट में साथ संबद्ध,
  3. बाइंड कि के साथ काम एक समारोह (उदाहरण के लिए updateForm) के साथ एक स्क्रिप्ट बनाने ऑनफॉर्म सबमिट ईवेंट, कंटेनर-विशिष्ट इंस्टॉल करने योग्य ट्रिगर्स का उपयोग करना देखें।
  4. updateForm समारोह में प्रतिक्रिया का विश्लेषण करें और फार्म सेवा

का उपयोग कर रहा संशोधित करने के लिए एक सूची का चयन करें जो easiliy एक बहु विकल्प के लिए संशोधित किया जा सकता है निम्नलिखित कोड का उपयोग किया है अपने रूप बदल सकते हैं।

function updateForm(){ 
    var form = FormApp.openById('YOUR_FORM_ID'); // Base form 
    // need to read what dates are available and which are taken 
    var doc = SpreadsheetApp.getActiveSpreadsheet(); 
    var dates = doc.getRange("dates!A1:A10").getValues(); //available options 
    var taken_dates = doc.getRange("responses!F2:F51").getValues(); //just getting first 50 responses 
    // joining the taken dates into one string instead of an array to compare easier 
    var taken_dates_string = taken_dates.join("|"); 

    var choice = []; 
    // loop through our available dates 
    for (d in dates){ 
    // test if date still available 
    if (dates[d][0] != "" && taken_dates_string.indexOf(dates[d][0]) === -1){ 
     choice.push(dates[d][0]); // if so we add to temp array 
    } 
    } 
    var formItems = form.getItems(FormApp.ItemType.LIST); // our form list items 
    // assumption that first select list is the one you want to change 
    // and we just rewrite all the options to ones that are free 
    formItems[0].asListItem().setChoiceValues(choice); 
} 
संबंधित मुद्दे