Tự Động Hóa Với Google Apps Script
Google Apps Script (GAS) là JavaScript chạy trực tiếp trên Google Sheets — miễn phí, không cần cài đặt gì thêm. Với GAS bạn có thể tự động hóa báo cáo hàng ngày, gửi cảnh báo qua email, tạo đơn hàng hàng loạt và nhiều tác vụ lặp đi lặp lại khác.
Mở Apps Script
Trong Google Sheets: Extensions → Apps Script → trình soạn thảo mở ra trong tab mới.
Tự Động Gửi Báo Cáo Qua Email
Script dưới đây gửi báo cáo doanh thu cuối ngày lúc 18h:
function sendDailySalesReport() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dashboard = ss.getSheetByName("Dashboard");
var banHang = ss.getSheetByName("BanHang");
// Lấy doanh thu hôm nay từ ô B2 của Dashboard
var doanhThuHomNay = dashboard.getRange("B2").getValue();
var sodon = dashboard.getRange("D2").getValue();
// Format số tiền
var doanhThuFormat = doanhThuHomNay.toLocaleString("vi-VN") + " VND";
// Lấy ngày hôm nay
var today = new Date();
var dateStr = Utilities.formatDate(today, "Asia/Ho_Chi_Minh", "dd/MM/yyyy");
// Gửi email
MailApp.sendEmail({
to: "boss@company.com",
subject: "Bao cao ban hang ngay " + dateStr,
htmlBody: "Bao Cao Cuoi Ngay " + dateStr + "
"
+ "Doanh thu: " + doanhThuFormat + "
"
+ "So don: " + sodon + " don
"
+ "Xem chi tiet: Mo Spreadsheet
"
});
Logger.log("Da gui bao cao ngay " + dateStr);
}Thiết lập trigger tự động: Apps Script → Triggers (đồng hồ bên trái) → Add Trigger → chọn hàm sendDailySalesReport → Time-driven → Day timer → 6pm to 7pm.
Cảnh Báo Tự Động Khi Hàng Sắp Hết
function alertLowStock() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("DanhMucSP");
var data = sheet.getDataRange().getValues();
var lowStockItems = [];
// Bỏ qua header (hàng 0)
for (var i = 1; i < data.length; i++) {
var maSP = data[i][0]; // Cột A
var tenSP = data[i][1]; // Cột B
var tonThucTe = data[i][6]; // Cột G
var mucToiThieu = data[i][7]; // Cột H
if (maSP && tonThucTe <= mucToiThieu) {
lowStockItems.push(maSP + " - " + tenSP + ": con " + tonThucTe);
}
}
if (lowStockItems.length > 0) {
MailApp.sendEmail({
to: "manager@company.com",
subject: "CANH BAO: " + lowStockItems.length + " SP sap het hang",
body: "Danh sach SP can nhap them:\n\n" + lowStockItems.join("\n")
});
}
}Trigger cảnh báo tồn kho: Thiết lập trigger chạy hàm alertLowStock mỗi sáng lúc 8h. Bạn sẽ nhận email ngay khi đến công ty nếu có hàng cần nhập thêm.
Tự Động Tạo Phiếu Giao Hàng
function createDeliveryNote() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var banHang = ss.getSheetByName("BanHang");
var activeRow = banHang.getActiveCell().getRow();
if (activeRow < 2) { return; }
var rowData = banHang.getRange(activeRow, 1, 1, 11).getValues()[0];
var maDon = rowData[1]; // Cột B
var maKH = rowData[2]; // Cột C
// Tạo Google Doc từ template
var templateId = "YOUR_TEMPLATE_DOC_ID";
var docCopy = DriveApp.getFileById(templateId).makeCopy("Phieu_" + maDon);
var doc = DocumentApp.openById(docCopy.getId());
var body = doc.getBody();
// Thay thế placeholder
body.replaceText("{{MA_DON}}", maDon);
body.replaceText("{{MA_KH}}", maKH);
doc.saveAndClose();
Logger.log("Da tao phieu giao hang: " + maDon);
}onEdit Trigger — Tự Động Khi Nhập Liệu
Hàm onEdit chạy tự động mỗi khi người dùng sửa ô bất kỳ:
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
// Chỉ xử lý khi chỉnh sửa sheet BanHang, cột K (trạng thái)
if (sheet.getName() === "BanHang" && range.getColumn() === 11) {
var newStatus = range.getValue();
var row = range.getRow();
if (newStatus === "Da giao") {
// Tô xanh lá cho cả hàng
sheet.getRange(row, 1, 1, 14).setBackground("#E8F5E9");
// Ghi thời gian giao hàng vào cột O
sheet.getRange(row, 15).setValue(new Date());
} else if (newStatus === "Huy") {
sheet.getRange(row, 1, 1, 14).setBackground("#FFEBEE");
}
}
}Chúc mừng bạn đã hoàn thành khóa học! Bạn đã xây dựng được hệ thống quản lý bán hàng hoàn chỉnh với Google Sheets: thiết lập cấu trúc, quản lý đơn hàng và khách hàng, báo cáo doanh thu, kiểm soát tồn kho và tự động hóa bằng Apps Script. Khám phá thêm các template sẵn có tại SheetStore Marketplace để tiết kiệm thời gian!