2012-12-03 18 views
8

Tôi đã thiết lập biểu mẫu bằng googledocs. Tôi chỉ muốn có dữ liệu thực tế được nhập vào biểu mẫu được gửi qua email cho tôi, thay vì phản hồi chung chung cho rằng biểu mẫu đã được hoàn thành.thiết lập tập lệnh để bao gồm dữ liệu biểu mẫu của tài liệu google trong thông báo qua email

Tôi không có kỹ năng hoặc kinh nghiệm về mã, v.v. nhưng chắc chắn tôi có thể làm được điều này. Tôi đã dành hàng giờ đồng hồ và không có may mắn.

Biểu mẫu của tôi thực sự là basic.it có 5 trường. 4 trong số đó chỉ là câu trả lời bằng văn bản và một lựa chọn nhiều.

Tôi tìm thấy tute trực tuyến này (http://www.labnol.org/internet/google-docs-email-form/20884/) mà tôi nghĩ tổng hợp những gì tôi đang cố gắng làm, nhưng chưa được có thể làm cho nó hoạt động.

từ trang web này tôi đã nhập đoạn mã sau:

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); 
} 

Về điều này, tôi nhận được câu trả lời như sau: ->

Kịch bản của bạn, Liên hệ Form Mailer, gần đây đã thất bại trong việc hoàn thành thành công. Bản tóm tắt (các) lỗi được trình bày dưới đây. Để định cấu hình trình kích hoạt cho tập lệnh này hoặc thay đổi cài đặt của bạn để nhận thông báo lỗi trong tương lai, hãy nhấp vào đây.

Tập lệnh được sử dụng bởi tài liệu 100% Club.

chi tiết:

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 

Có ai có thể giúp làm sáng tỏ về vấn đề này cho tôi? Tôi đoán tôi không bao gồm một số dữ liệu neeeded, nhưng tôi thành thật không có đầu mối.

Trả lời

-2

Bạn không cần sử dụng tập lệnh. Chỉ cần chuyển đến Công cụ >> Quy tắc thông báo trên Bảng tính Google của bạn. Ở đó bạn có thể thay đổi cài đặt để nhận email với thông tin mong muốn của mình mỗi khi tài liệu được thay đổi.

+0

tiếc là nó không .. nó sẽ gửi một email thông báo, khi ai đó hoàn thành một biểu mẫu vv, nhưng email chỉ nói rằng nó đã được cập nhật, bấm vào đây để kiểm tra. Tôi muốn nhập dữ liệu, được bao gồm trong email thông báo. – user1872449

4

Cách giải quyết http://www.labnol.org/internet/google-docs-email-form/20884/ Bạn phải thiết lập tập lệnh ứng dụng để chuyển tiếp dữ liệu dưới dạng email.

+0

Chỉ muốn chia sẻ rằng điều này làm việc cho tôi. Tôi đã sửa đổi tập lệnh để phân tích cú pháp biểu mẫu và thực sự điền vào email. Tôi sẽ đăng câu trả lời để chia sẻ mã nhưng tôi muốn nhận xét rằng đây là "câu trả lời đã giải quyết của tôi". –

0

Nếu đây là Biểu mẫu của Google, bạn có thêm bất kỳ cột nào trong bảng tính không có trong biểu mẫu không? Nếu bạn xóa các cột thừa thì nó bắt đầu làm việc cho tôi.

2

tôi sẽ trỏ đến những nhận xét trên mà giải quyết nó cho tôi: https://stackoverflow.com/a/14576983/134335

tôi mất đó gửi một bước xa hơn:

  • tôi loại bỏ các thông báo bình thường. Tập lệnh ứng dụng làm cho văn bản chung đó trở nên dư thừa và vô ích ngay bây giờ
  • Tôi đã sửa đổi tập lệnh để phân tích cú pháp kết quả và xây dựng phản hồi tương ứng.
 
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 
} 

Các kịch bản sử dụng trong ví dụ này là cực kỳ chung nhưng rất kiên cường để thay đổi vì các thông điệp được xây dựng như một cặp khóa/giá trị của các trường mẫu đệ trình.

Nếu bạn sử dụng tập lệnh của mình, bạn sẽ phải tinh chỉnh vòng lặp nếu các câu lệnh khớp với các trường của bạn đúng nguyên văn. Bạn cũng sẽ muốn chỉnh sửa biến toEmail.

Cảm ơn bạn một lần nữa vì câu hỏi và câu trả lời. Tôi chuẩn bị bỏ qua Google Biểu mẫu vì phản hồi chung chưa bao giờ đủ cho những gì tôi đang cố gắng làm.

Cuối cùng, để giải quyết vấn đề thực tế ở trên "toString of undefined" có nghĩa là một trong các trường biểu mẫu đã được gửi dưới dạng trống. Nếu tôi phải đoán, tôi sẽ nói tác giả chỉ sử dụng điều này cho các hình thức mà tất cả các lĩnh vực được yêu cầu hoặc một kiểm tra không xác định nhanh chóng sẽ được đưa ra.

giống như sau sẽ làm việc:

 
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"; 
} 

tôi đã không kiểm tra này một cách chính xác nhưng đó là một cách khá tiêu chuẩn đảm bảo các đối tượng được xác định trước khi cố gắng phương pháp như toString() rõ ràng sẽ không công việc.

Điều này cũng giải thích câu trả lời của Jon Fila. Kịch bản lệnh một cách mù quáng giả định tất cả các hàng tiêu đề trong phản hồi được gửi bởi biểu mẫu. Nếu bất kỳ trường nào không được yêu cầu hoặc bảng tính có các trường không còn trong biểu mẫu, bạn sẽ nhận được rất nhiều đối tượng không xác định.

Kịch bản có thể đã được mã hóa tốt hơn nhưng tôi sẽ không gây lỗi cho tác giả vì nó rõ ràng là một bằng chứng về khái niệm mà thôi. Thực tế là họ đề cập đến việc sửa chữa trả lời nhưng không đưa ra bất kỳ ví dụ nào về việc thực hiện nó đã làm cho nó hoàn toàn rõ ràng.