[Series Email] Bài 5: Tạo Hộp Thoại Xem Email Trước Khi Gửi

Để 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ư:

1. Mô tả ví dụ

  • 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 Email bằng Google SheetGửi riêng từng emailGửi Email bằng Google Sheet - xuất hiện hộp thoại xem trướcHiển thị nội dung xem trước

2. Các bước thực hiên

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

Bonus

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

Last updated

Navigation

Lionel

@Copyright 2023