Tự Động Hóa Doanh Nghiệp

Google Apps Script: 10 Script Tự Động Hóa Phổ Biến Nhất

Tuân HoangTuân Hoang
5 tháng 3, 2026
Cập nhật: 24 tháng 3, 2026
14 phút đọc
Google Apps Script: 10 Script Tự Động Hóa Phổ Biến Nhất

10 Google Apps Script phổ biến nhất giúp tự động hóa công việc hàng ngày — copy và dùng ngay, không cần kinh nghiệm lập trình.

Từ gửi email tự động, xuất báo cáo PDF, đồng bộ dữ liệu đến nhắc lịch hẹn — mỗi script đều có code hoàn chỉnh và hướng dẫn triển khai.

1. Google Apps Script Là Gì?

Google Apps Script là ngôn ngữ lập trình JavaScript chạy trên nền tảng Google Cloud, cho phép bạn tự động hóa và mở rộng chức năng của Google Sheets, Gmail, Google Drive, Google Calendar và toàn bộ hệ sinh thái Google Workspace.

Điểm mạnh nhất: Hoàn toàn miễn phí. Không cần cài đặt gì thêm. Chạy trực tiếp trong trình duyệt. Có thể lập lịch chạy tự động theo thời gian (trigger).

📊
Google Sheets
Tự động xử lý dữ liệu
📧
Gmail
Gửi email tự động
📅
Calendar
Tạo lịch tự động
📁
Drive
Quản lý file tự động

2. Cách Mở và Chạy Apps Script

  1. 1Mở Google Sheets → Menu ExtensionsApps Script
  2. 2Copy code script vào editor
  3. 3Click Run hoặc thiết lập Trigger để chạy tự động
  4. 4Cấp quyền khi được yêu cầu (chỉ cần lần đầu)

3. 10 Script Tự Động Hóa Phổ Biến Nhất

1 Gửi Email Báo Cáo Hàng Ngày

Tự động lấy dữ liệu từ Sheet, tóm tắt và gửi email báo cáo cho sếp mỗi sáng lúc 8h.

function guiBaoCaoHangNgay() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const doanhThu = sheet.getRange('B2').getValue();
  const donHang = sheet.getRange('C2').getValue();

  const subject = 'Báo cáo doanh thu ngày ' + new Date().toLocaleDateString('vi-VN');
  const body = `Xin chào,\n\nBáo cáo hôm nay:\n- Doanh thu: ${doanhThu.toLocaleString('vi-VN')} đ\n- Số đơn: ${donHang}\n\nTrân trọng`;

  GmailApp.sendEmail('boss@company.com', subject, body);
}
// Thiết lập Trigger: Time-driven → Day timer → 8am-9am
2 Nhắc Công Nợ Tự Động

Quét bảng công nợ mỗi ngày, tự gửi email nhắc khách hàng khi sắp đến hạn thanh toán.

function nhacCongNo() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const homNay = new Date();

  for (let i = 1; i < data.length; i++) {
    const email = data[i][0];
    const soTien = data[i][1];
    const ngayHetHan = new Date(data[i][2]);
    const soNgayConLai = Math.ceil((ngayHetHan - homNay) / (1000*60*60*24));

    if (soNgayConLai === 7 || soNgayConLai === 3 || soNgayConLai === 1) {
      GmailApp.sendEmail(email,
        'Nhắc thanh toán công nợ',
        `Kính gửi,\n\nCông nợ ${soTien.toLocaleString()} đ sẽ đến hạn trong ${soNgayConLai} ngày.\n\nVui lòng thanh toán đúng hạn.`
      );
    }
  }
}
// Trigger: Mỗi ngày lúc 9h sáng
3 Tự Động Điền Timestamp Khi Có Dữ Liệu Mới

Tự động ghi ngày giờ vào cột B khi người dùng nhập dữ liệu vào cột A.

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const range = e.range;

  // Chỉ áp dụng cho cột A (cột 1)
  if (range.getColumn() === 1 && range.getValue() !== '') {
    sheet.getRange(range.getRow(), 2)
      .setValue(new Date())
      .setNumberFormat('dd/MM/yyyy HH:mm');
  }
}
// Không cần Trigger — tự chạy khi edit
4 Sao Lưu Sheet Tự Động Hàng Ngày

Tự động tạo bản sao của spreadsheet vào folder Drive mỗi ngày, đặt tên theo ngày tháng.

function backupHangNgay() {
  const file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId());
  const backupFolder = DriveApp.getFolderById('YOUR_FOLDER_ID');
  const ngay = Utilities.formatDate(new Date(), 'Asia/Ho_Chi_Minh', 'yyyy-MM-dd');

  file.makeCopy('Backup_' + ngay, backupFolder);
  console.log('Backup thanh cong: Backup_' + ngay);
}
// Trigger: Mỗi ngày lúc 2h sáng
5 Gửi Email Chào Mừng Khách Hàng Mới

Khi thêm khách hàng mới vào sheet, tự động gửi email chào mừng cá nhân hóa.

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  if (sheet.getName() !== 'Khách Hàng') return;

  const row = e.range.getRow();
  const col = e.range.getColumn();

  // Khi điền email (cột 3) lần đầu
  if (col === 3 && e.oldValue === undefined) {
    const ten = sheet.getRange(row, 1).getValue();
    const email = e.value;

    GmailApp.sendEmail(email,
      'Chào mừng ' + ten + ' đến với chúng tôi!',
      'Xin chào ' + ten + ',\n\nCảm ơn bạn đã tin tưởng. Chúng tôi rất vui được phục vụ bạn.\n\nTrân trọng,\nTeam SheetStore'
    );
  }
}
6 Xuất Sheet Ra PDF và Gửi Email

Tự động xuất sheet thành PDF và gửi email cho khách hàng — dùng cho báo giá, hóa đơn.

function xuatPDFGuiEmail() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetId = ss.getActiveSheet().getSheetId();
  const url = ss.getUrl().replace('/edit', '/export?format=pdf&gid=' + sheetId);

  const response = UrlFetchApp.fetch(url, {
    headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }
  });

  const blob = response.getBlob().setName('BaoGia_' + new Date().toLocaleDateString('vi-VN') + '.pdf');

  GmailApp.sendEmail('khachhang@email.com', 'Báo giá từ Công ty ABC',
    'Kính gửi,\n\nVui lòng xem báo giá đính kèm.', { attachments: [blob] }
  );
}
7 Cảnh Báo Tồn Kho Thấp

Kiểm tra tồn kho mỗi sáng, gửi alert khi sản phẩm dưới mức tối thiểu.

function kiemTraTonKho() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  let sanPhamCanNhap = [];

  for (let i = 1; i < data.length; i++) {
    const sanPham = data[i][0];
    const tonKho = data[i][1];
    const mucToiThieu = data[i][2];

    if (tonKho < mucToiThieu) {
      sanPhamCanNhap.push(`- ${sanPham}: còn ${tonKho}, cần nhập thêm`);
    }
  }

  if (sanPhamCanNhap.length > 0) {
    GmailApp.sendEmail('kho@company.com',
      '⚠️ Cảnh báo tồn kho thấp',
      'Các sản phẩm cần nhập hàng:\n' + sanPhamCanNhap.join('\n')
    );
  }
}
8 Tổng Hợp Dữ Liệu Từ Nhiều Sheet

Tự động gom dữ liệu từ 12 sheet tháng vào sheet tổng hợp năm.

function tongHopDuLieu() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetTongHop = ss.getSheetByName('Tổng Hợp');
  sheetTongHop.clearContents();

  const cacThang = ['T1','T2','T3','T4','T5','T6','T7','T8','T9','T10','T11','T12'];
  let allData = [['Tháng', 'Doanh Thu', 'Chi Phí', 'Lợi Nhuận']];

  cacThang.forEach(thang => {
    const sheet = ss.getSheetByName(thang);
    if (sheet) {
      const doanhThu = sheet.getRange('B2').getValue();
      const chiPhi = sheet.getRange('C2').getValue();
      allData.push([thang, doanhThu, chiPhi, doanhThu - chiPhi]);
    }
  });

  sheetTongHop.getRange(1, 1, allData.length, 4).setValues(allData);
}
9 Tạo Lịch Google Calendar Từ Sheet

Nhập danh sách cuộc họp vào Sheet, script tự tạo event trên Google Calendar.

function taoCuocHop() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const calendar = CalendarApp.getDefaultCalendar();

  for (let i = 1; i < data.length; i++) {
    if (data[i][4] === 'Đã tạo') continue; // Bỏ qua đã tạo

    const tieuDe = data[i][0];
    const batDau = new Date(data[i][1]);
    const ketThuc = new Date(data[i][2]);
    const moTa = data[i][3];

    calendar.createEvent(tieuDe, batDau, ketThuc, { description: moTa });
    sheet.getRange(i + 1, 5).setValue('Đã tạo');
  }
}
10 Gửi SMS/Zalo Qua API

Kết hợp Apps Script với eSMS API để gửi tin nhắn SMS tự động cho khách hàng.

function guiSMSTuDong(soDienThoai, noiDung) {
  const url = 'https://rest.esms.vn/MainService.svc/json/SendMultipleMessage_V4_get';
  const params = {
    ApiKey: 'YOUR_API_KEY',
    SecretKey: 'YOUR_SECRET_KEY',
    Phone: soDienThoai,
    Content: noiDung,
    SmsType: 2,
    Brandname: 'Cong Ty ABC'
  };

  const queryString = Object.keys(params)
    .map(k => k + '=' + encodeURIComponent(params[k])).join('&');

  UrlFetchApp.fetch(url + '?' + queryString);
  console.log('Da gui SMS den ' + soDienThoai);
}

4. Tips Nâng Cao Khi Dùng Apps Script

  • Luôn dùng try-catch: Bọc code trong try-catch để nhận email thông báo khi script bị lỗi thay vì chạy âm thầm.
  • Dùng PropertiesService lưu config: Lưu API keys, email address vào Script Properties thay vì hardcode trong code.
  • Test trước khi set Trigger: Luôn chạy thủ công và kiểm tra kết quả trước khi thiết lập chạy tự động.
  • Giới hạn quota: Apps Script có giới hạn 6 phút/lần chạy và 100 email/ngày cho tài khoản miễn phí. Workspace Business không có giới hạn này.

Template Google Sheets Với Apps Script Tích Hợp Sẵn

Không muốn viết code từ đầu? Template của SheetStore đã tích hợp sẵn automation cho quản lý bán hàng, kho hàng và kế toán.

Xem Template →

5. FAQ

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

Hoàn toàn miễn phí. Giới hạn: 100 email/ngày, 6 phút/lần chạy với tài khoản cá nhân. Google Workspace Business không giới hạn.

Cần biết lập trình không?

JavaScript cơ bản là đủ. Với các script trong bài, chỉ cần copy và sửa thông số như email, tên sheet mà không cần hiểu toàn bộ.

Có thể kết nối Apps Script với Zalo, SMS không?

Có. Dùng UrlFetchApp để gọi API của eSMS, Zalo OA hoặc bất kỳ dịch vụ nào có REST API.

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