2012-12-03 19 views
8

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

मेरे पास कोड आदि के साथ कोई कौशल या अनुभव नहीं है, लेकिन मुझे यकीन था कि मैं इसे हल कर सकता हूं। मैंने घंटों घंटे बिताए हैं और कोई भाग्य नहीं है।

मेरे प्रपत्र वास्तव में basic.it 5 क्षेत्रों है। जिनमें से 4 केवल टेक्स्ट प्रतिक्रियाएं हैं, और एक बहु विकल्प हैं।

मुझे यह ट्यूट ऑनलाइन मिला (http://www.labnol.org/internet/google-docs-email-form/20884/) जो मुझे लगता है कि मैं क्या करने की कोशिश कर रहा हूं, लेकिन ऐसा नहीं हुआ है इसे काम करने में सक्षम।

function sendFormByEmail(e) 
{  
    var email = "[email protected]"; 

    var subject = "Google Docs Form Submitted"; 

    var s = SpreadsheetApp.getActiveSheet(); 
    var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];  
    var message = "";  

for(var i in headers) 
message += headers[i] + ' = '+ e.namedValues[headers[i]].toString() + "\n\n"; 

    MailApp.sendEmail(email, subject, message); 
} 
इस के लिए

, मैं निम्नलिखित प्रतिक्रिया मिल:

इस साइट से

मैं निम्नलिखित कोड में प्रवेश किया ->

आपकी स्क्रिप्ट, हमसे संपर्क फार्म मेलर, हाल ही में समाप्त करने के लिए असफल हो गया है सफलतापूर्वक। विफलता का सारांश नीचे दिखाया गया है। इस स्क्रिप्ट के लिए ट्रिगर्स को कॉन्फ़िगर करने के लिए, या भविष्य की विफलता अधिसूचनाएं प्राप्त करने के लिए अपनी सेटिंग बदलें, यहां क्लिक करें।

स्क्रिप्ट का उपयोग दस्तावेज़ 100% क्लब द्वारा किया जाता है।

विवरण:

Start    Function  Error Message              Trigger  End 
12/3/12 11:06 PM sendFormByEmail TypeError: Cannot call method "toString" of undefined. (line 12) formSubmit 12/3/12 11:06 PM 

किसी सक्षम मदद करने के लिए मेरे लिए यह पर कुछ प्रकाश डाला है? मुझे लगता है कि मैं कुछ डेटा शामिल नहीं कर रहा हूं, लेकिन मुझे ईमानदारी से कोई सुराग नहीं है।

उत्तर

-2

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

+0

दुर्भाग्यवश यह नहीं है .. जब कोई कोई फॉर्म पूरा करता है तो यह एक अधिसूचना ईमेल भेजता है, लेकिन ईमेल सिर्फ यह कहता है कि इसे अपडेट किया गया है, जांचने के लिए यहां क्लिक करें। मैं अधिसूचना ईमेल में शामिल डेटा दर्ज करना चाहता हूं। – user1872449

4

वर्कअराउंड http://www.labnol.org/internet/google-docs-email-form/20884/ आप ईमेल के रूप में डेटा को अग्रेषित करने के सेटअप एप्लिकेशन स्क्रिप्ट किया है।

+0

सिर्फ यह साझा करना चाहता था कि यह मेरे लिए काम करता है। मैंने फॉर्म को पार्स करने के लिए स्क्रिप्ट को संशोधित किया और वास्तव में ईमेल भर दिया। मैं कोड साझा करने के लिए उत्तर पोस्ट करूंगा लेकिन मैं टिप्पणी करना चाहता था कि यह "मेरा हल उत्तर" है। –

0

यदि यह एक Google फॉर्म है, तो क्या आपके पास अपनी स्प्रेडशीट में कोई अतिरिक्त कॉलम है जो फ़ॉर्म पर नहीं है? यदि आप उन अतिरिक्त कॉलम को हटाते हैं तो यह मेरे लिए काम करना शुरू कर दिया।

2
मुझे लगता है कि इसके बाद के संस्करण टिप्पणी को इंगित करेंगे

मेरे लिए इसे हल:

  • मैं सामान्य सूचना निष्कासन: https://stackoverflow.com/a/14576983/134335

    मुझे लगता है कि एक कदम और आगे पोस्ट ले लिया। एप्लिकेशन स्क्रिप्ट कि सामान्य पाठ निरर्थक और बेकार अब

  • मैं स्क्रिप्ट वास्तव में परिणाम को पार्स करने और प्रतिक्रिया के हिसाब से निर्माण करने के लिए संशोधित कर देता है।
 
function sendFormByEmail(e) 
{ 
    var toEmail = "changeme"; 
    var name = ""; 
    var email = ""; 

    // Optional but change the following variable 
    // to have a custom subject for Google Docs emails 
    var subject = "Google Docs Form Submitted"; 
    var message = ""; 

    // The variable e holds all the form values in an array. 
    // Loop through the array and append values to the body. 

    var s = SpreadsheetApp.getActiveSheet(); 
    var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0]; 

    // Credit to Henrique Abreu for fixing the sort order 
    for(var i in headers) { 
    if (headers[i] = "Name") { 
     name = e.namedValues[headers[i]].toString(); 
    } 
    if (headers[i] = "Email") { 
     email = e.namedValues[headers[i]].toString(); 
    } 
    if (headers[i] = "Subject") { 
     subject = e.namedValues[headers[i]].toString(); 
    } 
    if (headers[i] = "Message") { 
     message = e.namedValues[headers[i]].toString(); 
    } 
    } 

    // See https://developers.google.com/apps-script/reference/mail/mail-app#sendEmail(String,String,String,Object) 
    var mailOptions = { 
    name: name, 
    replyTo: email, 
    }; 

    // This is the MailApp service of Google Apps Script 
    // that sends the email. You can also use GmailApp here. 
    MailApp.sendEmail(toEmail, subject, message, mailOptions); 

    // Watch the following video for details 
    // http://youtu.be/z6klwUxRwQI 

    // By Amit Agarwal - www.labnol.org 
} 

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

यदि आप मेरी स्क्रिप्ट का उपयोग करते हैं तो आपको अपने फ़ील्ड वर्बैटिम से मेल खाने के लिए ब्योरे को ट्विक करना होगा। आप toEmail चर को संपादित करना भी चाहेंगे।

प्रश्न और उत्तर के लिए फिर से धन्यवाद। मैं Google फॉर्म को मिटाने वाला था क्योंकि सामान्य प्रतिक्रिया कभी भी पर्याप्त नहीं थी जो मैं करने की कोशिश कर रहा था।

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

निम्नलिखित की तरह कुछ काम करेगा:

 
for(var i in headers) { 
    var formValue = e.namedValues[headers[i]]; 
    var formValueText = ""; 
    if (typeof(formValue) != "undefined") { 
    formValueText = formValue.toString(); 
    } 
    message += headers[i] + ' = '+ formvalueText + "\n\n"; 
} 

मैं ठीक इस परीक्षण नहीं किया है, लेकिन यह यकीन है कि वस्तु toString तरह के तरीकों को आजमाने से पहले परिभाषित किया गया है() बनाने का एक बहुत मानक तरीका है कि स्पष्ट रूप से नहीं होगा काम।

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

स्क्रिप्ट को बेहतर ढंग से कोड किया जा सकता था लेकिन मैं लेखक को दोष नहीं दूंगा क्योंकि यह स्पष्ट रूप से केवल अवधारणा का सबूत होने के लिए था। तथ्य यह है कि वे जवाब का उल्लेख करने के लिए सुधार करते हैं लेकिन इसे लागू करने पर कोई उदाहरण नहीं देते हैं, इसे पूरी तरह से स्पष्ट किया गया है।

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