AIDuLieu.comAI Dữ Liệu
Tự động hoá việc lặp lại

Trình kích hoạt Apps Script: để Google Sheets tự chạy việc theo giờ và khi có sửa đổi

Dùng trình kích hoạt Apps Script để Google Sheets tự đóng dấu thời gian, tạo trang tuần mới, chuyển dòng đã xong sang lưu trữ; nhờ AI viết mã và các giới hạn cần biết.

Cafe owner in Da Lat, Lam Dong, checking a tablet with a blank screen at the counter in early morning, chairs still stacked on tables, seen from behind

Google Sheets không có macro VBA như Excel, nhưng có Apps Script: một môi trường viết mã gắn sẵn trong bảng tính, chạy trên máy chủ của Google. Điều làm Apps Script khác hẳn macro là trình kích hoạt, tức cơ chế cho mã tự chạy mà không cần ai bấm nút: khi có người sửa một ô, khi bảng tính được mở, khi biểu mẫu có câu trả lời mới, hoặc đều đặn theo giờ, theo ngày, theo tuần, kể cả lúc máy tính của bạn đã tắt.

Với cửa hàng nhiều ca, nhóm bán hàng online hay văn phòng dùng chung bảng theo dõi, trình kích hoạt thay được những việc nhỏ mà ai đó hay quên: ghi giờ khi đơn đổi trạng thái, mở trang tuần mới mỗi sáng thứ Hai, dọn dòng đã xong sang trang lưu trữ mỗi đêm. Bài này giải thích các loại trình kích hoạt, cách nhờ AI viết mã cho từng việc, và những giới hạn nên biết trước để không bị bất ngờ.

Hai loại trình kích hoạt và khác biệt quan trọng

Trình kích hoạt đơn giản. Là những hàm có tên đặt sẵn như onOpen chạy khi mở bảng tính, onEdit chạy khi người dùng sửa một ô. Chỉ cần đặt đúng tên hàm là tự chạy, không phải cài đặt gì thêm. Đổi lại, chúng bị giới hạn: không được làm những việc cần xin quyền như gửi thư hay mở bảng tính khác, và chỉ được chạy trong thời gian ngắn, khoảng ba mươi giây.

Trình kích hoạt cài đặt. Là trình kích hoạt bạn tự tạo trong mục Triggers của trình soạn thảo Apps Script, hình chiếc đồng hồ báo thức ở thanh bên trái, hoặc tạo bằng mã. Loại này có thể chạy theo thời gian, khi biểu mẫu có câu trả lời mới, khi sửa ô, và được làm những việc cần quyền vì nó chạy dưới quyền của người đã tạo nó.

Hệ quả về quyền. Trình kích hoạt cài đặt chạy bằng tài khoản người tạo. Nếu người đó nghỉ việc và tài khoản bị khoá, mọi việc tự động dừng theo mà không ai báo. Nên ghi rõ trong tài liệu ai là người tạo, và cân nhắc dùng một tài khoản công việc ổn định.

Một điểm hay gây nhầm. onEdit chỉ chạy khi người dùng sửa ô bằng tay. Giá trị thay đổi do công thức tính lại, do IMPORTRANGE cập nhật, hay do một đoạn mã khác ghi vào sẽ không kích hoạt nó. Nhiều người viết onEdit để theo dõi một cột công thức và thắc mắc vì sao không có gì xảy ra.

Việc thứ nhất: đóng dấu thời gian khi trạng thái đơn thay đổi

Ví dụ giả định: bảng theo dõi đơn của một cửa hàng có cột Trạng thái ở cột E và muốn cột F tự ghi ngày giờ khi trạng thái chuyển sang "Đã giao". Các bước làm:

  1. Mở bảng tính, vào menu Extensions, chọn Apps Script. Trình soạn thảo mở trong thẻ mới, gắn với đúng bảng tính này.
  2. Mô tả cho AI: "Viết hàm onEdit cho Google Sheets. Trang tên DonHang, dòng 1 là tiêu đề. Khi người dùng sửa một ô ở cột E từ dòng 2 trở đi và giá trị mới là Đã giao, ghi ngày giờ hiện tại vào cột F cùng dòng, chỉ ghi nếu ô F đang trống. Không làm gì với trang khác. Thêm chú thích tiếng Việt."
  3. Dán mã AI trả về vào trình soạn thảo, lưu lại. Không cần cài trình kích hoạt vì onEdit là trình kích hoạt đơn giản.
  4. Thử trên bản sao của bảng tính: đổi trạng thái một dòng, xem cột F. Đổi một ô ở cột khác và ở trang khác, xác nhận không có gì xảy ra.
  5. Kiểm múi giờ: vào Project Settings của Apps Script và cài đặt bảng tính, đảm bảo múi giờ là giờ Việt Nam, nếu không dấu thời gian sẽ lệch.

Điều kiện "chỉ ghi nếu ô F đang trống" quan trọng hơn vẻ ngoài của nó. Không có điều kiện này, mỗi lần ai đó vô tình chọn lại "Đã giao" là thời điểm giao hàng bị ghi đè, và dữ liệu về thời gian giao mất giá trị.

Việc thứ hai: tự tạo trang tuần mới mỗi sáng thứ Hai

Nhiều nhóm theo dõi việc theo tuần, mỗi tuần một trang tính sao từ trang mẫu. Đây là việc hợp với trình kích hoạt theo thời gian.

  1. Chuẩn bị trang mẫu tên Mau, có sẵn tiêu đề và định dạng, không có dữ liệu.
  2. Mô tả cho AI: "Viết hàm taoTrangTuan cho Google Sheets: sao chép trang Mau thành trang mới, đặt tên là Tuan kèm ngày thứ Hai của tuần hiện tại theo dạng năm-tháng-ngày, đưa trang mới lên vị trí đầu. Nếu trang cùng tên đã có thì không tạo nữa. Ghi một dòng vào trang NhatKy gồm thời điểm chạy và kết quả."
  3. Dán mã, chạy tay hàm một lần từ trình soạn thảo để cấp quyền và xem kết quả trên bản sao.
  4. Vào mục Triggers, chọn Add Trigger, chọn hàm taoTrangTuan, nguồn sự kiện là Time-driven, loại Week timer, ngày thứ Hai, khung giờ sáng sớm.
  5. Sáng thứ Hai đầu tiên, mở bảng kiểm trang mới và trang NhatKy; xem thêm mục Executions trong trình soạn thảo để thấy lần chạy thành công hay lỗi.

Trình kích hoạt theo ngày, theo tuần chạy trong một khung giờ bạn chọn chứ không đúng từng phút. Nếu việc cần đúng giờ tuyệt đối, Apps Script không phải công cụ phù hợp. Kiểm tra "trang đã có thì không tạo" giúp mã chạy lại an toàn khi bạn lỡ bấm tay thêm một lần.

Việc thứ ba: chuyển dòng đã xong sang trang lưu trữ mỗi đêm

Bảng theo dõi dùng lâu ngày sẽ phình ra hàng nghìn dòng, chậm và khó nhìn. Một cách gọn là mỗi đêm chuyển các dòng có trạng thái "Hoàn tất" sang trang LuuTru. Đây là việc có xoá dữ liệu, nên mô tả cho AI phải kỹ: chép các dòng thoả điều kiện xuống dưới cùng trang LuuTru trước, kiểm số dòng đã chép bằng số dòng thoả điều kiện, chỉ khi khớp mới xoá các dòng đó khỏi trang chính, xoá từ dưới lên để không lệch chỉ số dòng, và ghi nhật ký số dòng đã chuyển.

Thứ tự "chép, kiểm, rồi mới xoá" là điểm cần soi kỹ trong mã AI trả về. Mã nào xoá trước rồi mới chép, hoặc chép và xoá trong cùng một vòng lặp mà không kiểm, đều có nguy cơ mất dữ liệu nếu chạy giữa chừng bị dừng. Apps Script có giới hạn thời gian chạy mỗi lần, khoảng vài phút tuỳ loại tài khoản, nên với bảng lớn, nhắc AI xử lý theo khối thay vì từng dòng một.

Chạy thử trên bản sao với khoảng ba mươi dòng có lẫn các trạng thái, so số dòng hai trang trước và sau. Khi ổn mới tạo trình kích hoạt theo ngày, khung giờ ban đêm khi không ai sửa bảng. Phần thiết kế cấu trúc cột trạng thái cho chuẩn có trong danh mục thiết kế bảng của trang.

Giới hạn cần biết trước

Apps Script miễn phí đi kèm tài khoản Google nhưng có hạn mức. Các con số cụ thể Google công bố và thay đổi theo thời gian, khác nhau giữa tài khoản cá nhân và tài khoản tổ chức, nên bảng dưới chỉ nêu loại giới hạn; hãy kiểm trang hạn mức hiện hành.

Loại giới hạnẢnh hưởng thực tếCách xử lý
Thời gian chạy mỗi lầnBảng lớn xử lý từng ô một có thể bị dừng giữa chừngĐọc và ghi theo khối bằng getValues, setValues; chia việc thành nhiều lần
Tổng thời gian chạy trình kích hoạt mỗi ngàyTrình kích hoạt chạy quá dày, như mỗi phút, nhanh chóng chạm trầnChọn nhịp vừa đủ; việc hằng ngày không cần chạy mỗi phút
Số thư gửi mỗi ngàyMã gửi thư hàng loạt bị chặn khi vượt hạnKhông dùng Apps Script làm công cụ gửi thư số lượng lớn
Trình kích hoạt đơn giảnKhông gửi thư, không mở bảng khác, thời gian chạy ngắnChuyển sang trình kích hoạt cài đặt khi cần quyền
Tài khoản người tạoNgười tạo nghỉ việc, trình kích hoạt dừngGhi tài liệu, dùng tài khoản công việc ổn định

Khi mã lỗi, Google có thể gửi thư thông báo lỗi cho người tạo trình kích hoạt. Đừng lọc những thư này vào thư mục ít đọc; đó là kênh duy nhất cho biết việc tự động đã ngừng chạy.

Việc nào nên giao cho trình kích hoạt, việc nào không

Không phải việc lặp lại nào cũng nên tự chạy theo giờ. Trình kích hoạt hợp với những việc nhỏ, có quy tắc rõ, kết quả dễ kiểm. Một số gợi ý để cân nhắc:

  • Nên: ghi dấu thời gian, đánh số thứ tự tự động cho dòng mới, tô màu dòng quá hạn, tạo trang mẫu theo kỳ, sao lưu một trang sang bảng tính lưu trữ mỗi tuần.
  • Nên, kèm kiểm kỹ: chuyển dòng đã xong sang trang khác, dọn dòng trùng do biểu mẫu gửi hai lần, vì có thao tác xoá.
  • Cân nhắc: gửi thư nhắc việc cho người trong nhóm, vì gửi nhầm là không thu hồi được và có hạn mức thư mỗi ngày.
  • Không nên: những việc cần người phán đoán, như duyệt đơn, quyết định giảm giá, xếp loại khách hàng, vì mã chỉ làm theo quy tắc cứng.
  • Không nên: những việc nối sang nhiều hệ thống ngoài Google, như đẩy đơn sang phần mềm kế toán; đó là phạm vi của công cụ tự động hoá liên ứng dụng.

Một cách thử đơn giản: nếu bạn không viết được quy tắc của việc đó thành ba bốn câu rõ ràng không có chữ "tuỳ trường hợp", việc đó chưa sẵn sàng để tự động hoá. Hãy làm tay thêm vài tuần, ghi lại các trường hợp ngoại lệ, rồi mới mô tả cho AI.

Giữ an toàn khi để bảng tính tự chạy

Bảng tính có mã tự chạy là bảng tính có thêm một "người dùng" vô hình làm việc cả khi bạn ngủ. Vì vậy cần vài quy tắc: chỉ người phụ trách được sửa mã, mọi lần chạy đều ghi nhật ký vào một trang riêng, và có tài liệu ngắn ghi rõ mỗi trình kích hoạt làm gì, chạy lúc nào, do ai tạo.

Khi nhờ AI viết mã, đừng dán dữ liệu thật của khách hàng; chỉ mô tả tên trang, tên cột, kiểu dữ liệu. Nếu cần ví dụ, tạo vài dòng giả. Trước khi bấm cấp quyền lần đầu, đọc danh sách quyền mà mã xin và đối chiếu với việc nó làm; bài về đọc hiểu mã AI viết trong cùng danh mục liệt kê những lệnh cần soi.

Còn khi việc tự động cần nối Google Sheets với các ứng dụng khác như phần mềm bán hàng, hộp thư, nhóm chat, đó là bài toán tự động hoá liên ứng dụng; trang AI Kết Nối trong cùng hệ viết riêng về chuyện đó.

Câu hỏi thường gặp

Vì sao hàm onEdit không chạy khi giá trị ô thay đổi?

onEdit chỉ chạy khi người dùng sửa ô trực tiếp. Giá trị đổi do công thức, do IMPORTRANGE hoặc do mã khác ghi vào không kích hoạt nó. Nếu cần theo dõi những thay đổi đó, dùng trình kích hoạt theo thời gian để quét định kỳ.

Trình kích hoạt theo giờ có chạy khi máy tính tắt không?

Có. Apps Script chạy trên máy chủ của Google, không phụ thuộc máy tính hay trình duyệt của bạn. Chỉ cần tài khoản người tạo trình kích hoạt còn hoạt động và mã không lỗi.

Làm sao biết trình kích hoạt đã chạy hay chưa?

Mở trình soạn thảo Apps Script, vào mục Executions để xem danh sách các lần chạy, thời gian và trạng thái. Nên viết mã ghi thêm một dòng nhật ký vào trang riêng trong bảng tính để người không mở trình soạn thảo cũng kiểm được.

Sao chép bảng tính thì trình kích hoạt có được sao theo không?

Mã Apps Script gắn với bảng tính được sao theo, nhưng trình kích hoạt cài đặt thì không. Bạn phải tạo lại trình kích hoạt trên bản mới. Điều này giúp bản sao dùng để thử không tự chạy ngoài ý muốn.

Nhiều người cùng sửa bảng thì onEdit có bị nhầm không?

onEdit chạy cho mỗi lần sửa, kể cả khi nhiều người cùng làm. Mã nên kiểm đúng trang và đúng cột trước khi làm gì, và không ghi đè ô đã có giá trị, để tránh các lần sửa chồng lên nhau làm sai dữ liệu.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138