[Series Email] Bài 5: Tạo Hộp Thoại Xem Email Trước Khi Gửi
Last updated
Last updated
Để tạo hộp thoại xem email, các bạn nên có trước một số kĩ năng cơ bản như:
Xem cách Tạo hộp thoại Dialog cơ bản (hocggsheet.com) hoặc xem của Google
Xem các Hàm Gửi Email cơ bản
Chọn 1 email bất kì trong Google Sheet
Bấm nút “Gửi riêng” và nó sẽ hiện ra hộp thư cho xem trước
Bấm “OK” để gửi ngay hoặc “HỦY” để thoát
Gửi riêng từng emailHiển thị nội dung xem trước
Bước 0: Tạo nút (bấm vào từng hình để xem)
Các bước
Đi đến “Chèn” -> “Bản vẽ”
Vẽ 1 hình bất kì. Click phải vào hình, chọn “Chỉnh sửa văn bản”. Sau khi format vừa ý thì chọn “Lưu và dóng”
Sau khi lưu, hình vẽ của bạn sẽ xuất hiện ngoại Google Sheet
Click phải chuột thì sẽ thấy dấu 3 chấm (dọc) ở góc phải hình
Click vào và chọn “Gán tệp lệnh”
Bạn gõ tên function vào rồi chọn “OK” (ở đây function mình sắp viết tên là guiRieng)
Sau khi gán tập lệnh, nút bấm tạo hộp thoại xem email đã sẵn sàng!
Bước 1: Khai báo biến
01234567
function guiRieng() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var activeCell = ss.getActiveCell(); var email = activeCell.getValue(); var subject = activeCell.offset(0, 1).getValue(); var body = activeCell.offset(0, 2).getValue();}
Chúng ta sử dụng hàm getActiveCell() để lấy ra ô đang bấm vào. Các biến subject và body sử dụng hàm offset() để dóng hàng dóng cột và lấy giá trị của 2 ô bên phải activeCell
Bước 2: Tạo hộp thư thông báo
0123456789101112131415
function guiRieng() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var activeCell = ss.getActiveCell(); var email = activeCell.getValue(); var subject = activeCell.offset(0, 1).getValue(); var body = activeCell.offset(0, 2).getValue(); var ui = SpreadsheetApp.getUi(); var result = ui.alert( 'Xem mẫu', '\r\n Người nhận: ' + email + '\r\n Tiêu đề: ' + subject + '\r\n Nội dung: \r\n' + body, ui.ButtonSet.OK_CANCEL);}
Khởi động service UI bằng hàm getUi()
Tạo biến result để mở hộp thoại dialog (xem các cách tạo hộp thoại)
Trong đó:
‘Xem mẫu’ là tiêu đề của hộp thoại
3 dòng tiếp theo là nội dung của hộp thoại, chú thích:
Dấu + để nối các chuỗi lại với nhau
Mạc định phần nội dung trong hộp thoại sẽ được viết trên 1 dòng (inline). Nếu bạn muốn xuống dòng giống trong hình, thì hãy thêm \r như code trên
Bước 3: viết câu lệnh điều kiện if khi bấm “OK“
Câu lệnh if thực hiện chức năng: Khi hộp thoại hiện ra, nếu bấm “OK” thì gửi email cho ô đang bấm vào ở Google Sheet (active cell). Các bạn không cần viết thêm else, vì để như vậy thì nó sẽ tự hiểu nếu bấm “HỦY” hoặc “CANCEL” hoặc phím Esc thì chương chính sẽ kết thúc. Hoàn tất 3 bước và toàn bộ code được thể hiện dưới đây:
012345678910111213141516171819
function guiRieng() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var activeCell = ss.getActiveCell(); var email = activeCell.getValue(); var subject = activeCell.offset(0, 1).getValue(); var body = activeCell.offset(0, 2).getValue(); var ui = SpreadsheetApp.getUi(); var result = ui.alert( 'Xem mẫu', '\r\n Người nhận: ' + email + '\r\n Tiêu đề: ' + subject + '\r\n Nội dung: \r\n' + body, ui.ButtonSet.OK_CANCEL); if (result == ui.Button.OK) { MailApp.sendEmail(email, subject, body); }}
Các bạn nên giới hạn điều kiện cho activeCell, bởi vì nếu ô đang bấm vào không phải là ô ở cột A (email) thì chương trình sẽ bị lỗi ngay. Chúng ta có thể dùng hàm if như sau:
0123
if (activeCell.getColumn() == 1) { // tạo hộp thoại và gửi email}
Chương trình sau cùng sẽ được:
012345678910111213141516171819202122
function guiRieng() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var activeCell = ss.getActiveCell(); var email = activeCell.getValue(); var subject = activeCell.offset(0, 1).getValue(); var body = activeCell.offset(0, 2).getValue(); var ui = SpreadsheetApp.getUi(); if (activeCell.getColumn() == 1) { var result = ui.alert( 'Xem mẫu', '\r\n To: ' + email + '\r\n Tiêu đề: ' + subject + '\r\n Nội dung: \r\n' + body, ui.ButtonSet.OK_CANCEL); if (result == ui.Button.OK) { MailApp.sendEmail(email, subject, body); } }}