2015-10-01 13 views
6

đây là tập lệnh đầu tiên tôi cố gắng viết từ đầu. Nó đã không được tốt cho đến bây giờ vì vậy tôi sẽ yêu cầu một số giúp đỡ.Google Apps Scripts - Trích xuất dữ liệu từ gmail sang bảng tính

Trường hợp: Tôi nhận email xác nhận thương mại điện tử từ các trang web thương mại điện tử không có địa chỉ email trả lời. Trong cơ thể của email, họ gửi địa chỉ email từ người mua. Tôi muốn gửi một thư tự động đến địa chỉ email của cơ thể.

Làm thế nào tôi có kế hoạch để làm điều này (bất kỳ suggetions để loại bỏ các bước sẽ được cảm ơn).

  1. Sử dụng quy tắc để gắn thẻ email đến bằng một thẻ duy nhất.

  2. Sử dụng thẻ đó để xác định email trong gmail bằng tập lệnh, từng cái một và trích xuất thông tin tôi cần. Sử dụng regex với nội dung email để trích xuất địa chỉ email tôi cần gửi email tự động. Kế hoạch là để có được: chủ đề, ngày, email từ cơ thể.

  3. Viết tất cả thông tin đó vào bảng tính.

  4. Loại bỏ thông tin thẻ duy nhất để ngăn các lần chạy trùng lặp.

  5. Sau đó, sử dụng biểu mẫu con la addon để gửi email từ bảng tính.

Cho đến nay, tôi đã xử lý bước 1 (dễ dàng), và được stuggling với bước 2 và 3 (im không phải là một coder, tôi có thể đọc, undestrand và hack. Viết từ đầu là một hoàn toàn khác nhau Điều). Ive xử lý với 4 trước khi tôi nghĩ rằng đây là cách tốt nhất để đối phó với nó.

Với tập lệnh tôi trích xuất thông tin vào bảng tính, với addon tôi sử dụng thông tin từ bảng tính để gửi email.

Đây là mã ive được viết cho đến thời điểm này. Tôi đã để lại phần regex vì sau này tôi thậm chí không thể viết bất cứ điều gì vào bảng tính được nêu ra. một khi tôi nhận được rằng làm việc, bệnh bắt đầu làm việc trong regex và "loại bỏ các nhãn" khía cạnh của kịch bản.

function myFunction() { 
    function getemails() { 
    var label = GmailApp.getUserLabelByName("Main tag/subtag"); 
    var threads = label.getThreads(); 
    for (var i = 0; i < threads.length; i++) { 
    var messages=threads[i].getMessages(); 
     for (var j = 0; j < messages.length; j++) { 
    var message=messages[j]; 
    var subject=message.getSubject(); 
    tosp(message); 
     } 
    } 
    } 

    function tosp(message){ 
    var body=message.getBody() 
    var date=message.getDate(); 
    var subject=message.getSubject(); 
    var id= "my spreasheet id"; 
    var ss = SpreadsheetApp.openById(id); 
    var sheet = ss.getActiveSheet(); 
    sheet.appendRow(subject,date,body);  

} 
} 

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn Sebastian

Trả lời

15

Sau đây là đoạn code tôi đã viết và thử nghiệm mà thực hiện các bước 2, 3 và 4 được đề cập bởi bạn hoàn toàn tốt.

function myFunction() { 

    var ss = SpreadsheetApp.getActiveSheet(); 

    var label = GmailApp.getUserLabelByName("MyLabel"); 
    var threads = label.getThreads(); 

    for (var i=0; i<threads.length; i++) 
    { 
    var messages = threads[i].getMessages(); 

    for (var j=0; j<messages.length; j++) 
    { 
     var msg = messages[j].getBody(); 
     var sub = messages[j].getSubject(); 
     var dat = messages[j].getDate(); 

     ss.appendRow([msg, sub, dat]) 
    } 
     threads[i].removeLabel(label); 
    } 
} 

Một trong những lỗi trong mã của bạn là các appendRow chức năng chấp nhận một loạt các yếu tố quy định trong [ ] dấu ngoặc đơn.

Tùy thuộc vào nơi bạn đang gắn kịch bản này, dòng code của bạn:

var ss = SpreadsheetApp.openById(id); 

là không cần thiết nếu kịch bản đang được viết trong trình soạn thảo kịch bản của bảng tính mà bạn muốn những email này để đăng nhập .Tuy nhiên, nếu có nhiều sheet trong bảng tính đó, bạn có thể thay thế dòng của tôi

var ss = SpreadsheetApp.getActiveSheet(); 

bởi

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Sheet1"); 

gợi ý khác là các mã hiện tại sẽ cung cấp cho bạn các thông điệp trong định dạng HTML. Do đó, nếu bạn muốn nhận được thông báo trong văn bản đơn giản như bạn nhìn thấy nó, sử dụng:

var msg = messages[i].getPlainBody(); 

Bây giờ bạn có thể viết một hàm cho regex và vượt qua sứ điệp msg đó. Hi vọng điêu nay co ich!

+0

Giải thích chi tiết và tốt đẹp như vậy! Tôi chỉ không thể đi qua mà không đưa Thumbs Up đến 'pointNclick'! – Zongjun

+0

@ pointNclick, xin lỗi chủ đề cũ. nhưng không thể giúp trả lời .... tôi có hơn 5000 tin nhắn (chủ đề) trong một nhãn trong gmail. nhưng mã trên chỉ liệt kê 524 thư trong bảng tính google. Thread.length dưới chế độ gỡ lỗi chỉ hiển thị 500. điều gì có thể là lý do? – sifar786

Các vấn đề liên quan