Google Sheets Nâng Cao

Apps Script Cho Người Mới: Tự Động Hóa Google Sheets Từ Zero

Tuân HoangTuân Hoang
7 tháng 3, 2026
Cập nhật: 24 tháng 3, 2026
14 phút đọc
Apps Script Cho Người Mới: Tự Động Hóa Google Sheets Từ Zero

Apps Script Google Sheets cho người mới bắt đầu — học tự động hóa từ zero: gửi email tự động, tạo báo cáo, nhắc nhở deadline mà không cần kinh nghiệm lập trình.

Chỉ cần biết công thức Excel cơ bản, bạn có thể học Apps Script trong 1 tuần và tiết kiệm hàng giờ làm việc thủ công mỗi ngày.

1. Apps Script Là Gì?

Google Apps Script là ngôn ngữ lập trình dựa trên JavaScript, được tích hợp sẵn trong Google Workspace (Sheets, Docs, Gmail, Calendar...). Điều đặc biệt: bạn không cần cài đặt gì, chạy hoàn toàn trên cloud — miễn phí.

Với Apps Script, bạn có thể:

  • Tự động hóa tác vụ lặp lại: Sao chép dữ liệu, định dạng, tính toán hàng loạt
  • Gửi email tự động: Báo cáo cuối ngày, nhắc nhở deadline, thông báo đơn hàng
  • Kết nối API: Pull dữ liệu từ dịch vụ ngoài vào Sheets
  • Tạo form xử lý phức tạp: Validation, routing, gửi dữ liệu đến nhiều sheet
  • Xây dựng ứng dụng web nhỏ: Web App đơn giản từ Google Sheets

Apps Script vs VBA

VBA (Excel) chạy cục bộ trên máy tính. Apps Script chạy trên cloud — không phụ thuộc hệ điều hành, có thể lên lịch chạy tự động 24/7 kể cả khi tắt máy, và kết nối được với mọi dịch vụ Google.

2. Cách Mở Apps Script Editor

  1. Mở Google Sheets
  2. Menu: Extensions → Apps Script
  3. Trình soạn thảo mở ra trong tab mới — đây là IDE của Apps Script
  4. File mặc định: Code.gs với hàm myFunction() rỗng

Lưu ý về giới hạn

Apps Script miễn phí có giới hạn: 6 phút/lần chạy, 90 phút/ngày tổng cộng, 100 email/ngày. Google Workspace Business không giới hạn chặt như vậy.

3. Script Đầu Tiên — Hiểu Cấu Trúc Cơ Bản

// Script đơn giản nhất — hiển thị thông báo function xin_chao() { // SpreadsheetApp là object truy cập Google Sheets const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Đọc giá trị ô A1 const tenKhachHang = sheet.getRange('A1').getValue(); // Hiển thị thông báo popup SpreadsheetApp.getUi().alert('Xin chào, ' + tenKhachHang + '!'); // Ghi giá trị vào ô B1 sheet.getRange('B1').setValue('Đã xử lý lúc: ' + new Date()); }

Chạy script: Click nút ▶ Run (hoặc Ctrl+R). Lần đầu chạy sẽ yêu cầu cấp quyền — click "Allow" để cho phép script truy cập Sheets và Gmail.

4. Đọc Và Ghi Dữ Liệu Vào Sheet

function xuLyDuLieu() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheetNguon = ss.getSheetByName('DonHang'); const sheetKetQua = ss.getSheetByName('BaoCao'); // Đọc toàn bộ dữ liệu (nhanh hơn đọc từng ô) const duLieu = sheetNguon.getDataRange().getValues(); // Dòng đầu là header, bỏ qua const header = duLieu[0]; const rows = duLieu.slice(1); // Lọc đơn hàng hoàn thành const donHoanThanh = rows.filter(row => row[4] === 'Hoàn thành'); // Tính tổng doanh thu const tongDoanhThu = donHoanThanh.reduce((sum, row) => sum + row[5], 0); // Ghi kết quả vào sheet BaoCao sheetKetQua.getRange('B2').setValue(donHoanThanh.length); sheetKetQua.getRange('B3').setValue(tongDoanhThu); sheetKetQua.getRange('B4').setValue(new Date()); Logger.log('Xong! Tổng: ' + tongDoanhThu); }

Best Practice: Đọc theo batch

Luôn dùng getValues() để đọc cả vùng một lần thay vì lặp qua từng ô với getValue(). Nhanh hơn 10-100 lần khi có nhiều dòng.

5. Gửi Email Tự Động

function guiBaoCaoNgay() { const sheet = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName('BaoCao'); // Đọc số liệu const sodon = sheet.getRange('B2').getValue(); const doanhThu = sheet.getRange('B3').getValue(); const ngay = Utilities.formatDate(new Date(), 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy'); // Định dạng tiền Việt const doanhThuFormat = doanhThu.toLocaleString('vi-VN') + ' VNĐ'; // Nội dung email HTML const noiDung = ` <h2>Báo Cáo Ngày ${ngay}</h2> <table border="1" cellpadding="8"> <tr><td><b>Số đơn hàng</b></td><td>${sodon}</td></tr> <tr><td><b>Doanh thu</b></td><td>${doanhThuFormat}</td></tr> </table> <p>Trân trọng,<br/>Hệ thống báo cáo tự động</p> `; // Gửi email GmailApp.sendEmail( 'giamdoc@congty.com', 'Báo Cáo Doanh Thu Ngày ' + ngay, '', // plain text (để trống khi dùng htmlBody) { htmlBody: noiDung } ); Logger.log('Email đã gửi thành công!'); }

6. Triggers — Chạy Script Tự Động Theo Lịch

Trigger cho phép script chạy tự động mà không cần bạn click Run. Có 2 loại:

Loại Trigger Khi nào chạy Ví dụ dùng
Time-drivenTheo lịch (mỗi giờ, mỗi ngày, mỗi tuần)Gửi báo cáo 8h sáng mỗi ngày
onEditKhi có người chỉnh sửa sheetValidate dữ liệu nhập vào
onFormSubmitKhi form được submitGửi email xác nhận đặt hàng
onOpenKhi mở file SheetsHiển thị thông báo, cập nhật dữ liệu
// Tạo Time Trigger bằng code (chạy một lần để thiết lập) function taoTrigger() { // Xóa trigger cũ để tránh trùng const triggers = ScriptApp.getProjectTriggers(); triggers.forEach(t => ScriptApp.deleteTrigger(t)); // Tạo trigger chạy mỗi ngày lúc 8-9 giờ sáng ScriptApp.newTrigger('guiBaoCaoNgay') .timeBased() .everyDays(1) .atHour(8) .create(); Logger.log('Trigger đã được tạo!'); }
// Chạy tự động khi mở file function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('🔧 Công Cụ') .addItem('📊 Tạo Báo Cáo', 'xuLyDuLieu') .addItem('📧 Gửi Email Báo Cáo', 'guiBaoCaoNgay') .addSeparator() .addItem('🔄 Cập Nhật Dữ Liệu', 'capNhatDuLieu') .addToUi(); }

Menu tùy chỉnh xuất hiện trên thanh menu của Sheets — người dùng không cần biết lập trình, chỉ cần click menu là thực hiện tác vụ phức tạp.

8. Bài Tập Thực Tế — Hệ Thống Nhắc Nhở Deadline

// Kiểm tra deadline và gửi email nhắc nhở function nhacNhoDeadline() { const sheet = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName('CongViec'); const data = sheet.getDataRange().getValues(); const homNay = new Date(); homNay.setHours(0, 0, 0, 0); const ngayMai = new Date(homNay); ngayMai.setDate(ngayMai.getDate() + 1); const canhBao = []; // Bỏ qua header (dòng 0) for (let i = 1; i < data.length; i++) { const tenCV = data[i][0]; const nguoiPhuTrach = data[i][1]; const emailPT = data[i][2]; const deadline = new Date(data[i][3]); const trangThai = data[i][4]; // Bỏ qua công việc đã hoàn thành if (trangThai === 'Hoàn thành') continue; deadline.setHours(0, 0, 0, 0); const soNgay = Math.ceil((deadline - homNay) / (1000 * 60 * 60 * 24)); if (soNgay <= 1) { // Gửi email nhắc nhở cá nhân GmailApp.sendEmail(emailPT, '⚠️ Nhắc nhở: Deadline sắp đến — ' + tenCV, `Xin chào ${nguoiPhuTrach}, Công việc "${tenCV}" có deadline vào ngày ${Utilities.formatDate(deadline, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy')}. Vui lòng cập nhật tiến độ.` ); canhBao.push(tenCV); } } if (canhBao.length > 0) { Logger.log('Đã nhắc nhở ' + canhBao.length + ' công việc: ' + canhBao.join(', ')); } }

Template Google Sheets Quản Lý Công Việc Với Apps Script

Tại SheetStore.vn, nhiều template đã tích hợp sẵn Apps Script để tự động hóa — nhắc deadline, gửi báo cáo, cập nhật dữ liệu. Không cần tự code từ đầu.

Xem Template Có Apps Script →

9. FAQ

Apps Script có miễn phí không?

Có — miễn phí với giới hạn 6 phút/lần chạy, 90 phút tổng/ngày, 100 email/ngày. Google Workspace Business có giới hạn cao hơn nhiều.

Cần biết lập trình để học Apps Script không?

Không cần lập trình sâu — biết kiến thức JavaScript cơ bản (biến, vòng lặp, hàm) là đủ. Nhiều tác vụ có thể copy script mẫu và chỉnh sửa.

Apps Script kết nối được với phần mềm khác không?

Có — gọi bất kỳ API HTTP nào qua UrlFetchApp.fetch(). Kết nối được Zalo OA, Telegram, Slack, CRM, ERP... miễn là có API.

Bài Tiếp Theo: ARRAYFORMULA & LAMBDA

Học thêm hai hàm mảng mạnh nhất giúp xử lý dữ liệu hàng loạt mà không cần Apps Script hay VBA.

Đọc bài: ARRAYFORMULA & LAMBDA →

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận