Chào mọi người,
Dạo gần đây mình có mày mò tìm hiểu về Google Apps Script để tự động hóa một vài tác vụ nhỏ trong công việc. Hôm nay mình muốn chia sẻ một script khá hay ho giúp tự động tạo danh sách công việc theo ngày từ một bảng dữ liệu gốc.
Tình huống: Mình thường xuyên phải theo dõi các công việc cần làm trong tuần. Thay vì copy-paste thủ công từng ngày, mình muốn có một danh sách tự động cập nhật.
Giải pháp: Sử dụng Google Apps Script để đọc dữ liệu từ một Google Sheet và tạo ra các trang tính con cho từng ngày, chứa các công việc tương ứng.
Cách thực hiện cơ bản:
- Tạo một Google Sheet chính với các cột như: Tên công việc, Ngày bắt đầu, Ngày kết thúc, Người phụ trách.
- Viết một đoạn script nhỏ trong Extensions -> Apps Script.
- Script sẽ lặp qua từng hàng trong bảng dữ liệu chính.
- Kiểm tra xem ngày của công việc có trùng với ngày hiện tại (hoặc ngày bạn muốn tạo danh sách) hay không.
- Nếu trùng, copy công việc đó sang một trang tính con tương ứng với ngày đó. Nếu trang tính con chưa có, script sẽ tự tạo mới.
Ví dụ đoạn code đơn giản (minh họa):
function createDailyTasks() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('Data'); // Tên sheet chứa dữ liệu gốc
var dataRange = dataSheet.getDataRange();
var values = dataRange.getValues();
var today = new Date();
var todayStr = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy-MM-dd');
var dailySheetName = 'Tasks_' + todayStr;
var dailySheet = ss.getSheetByName(dailySheetName);
if (!dailySheet) {
dailySheet = ss.insertSheet(dailySheetName);
// Thêm tiêu đề cho sheet mới nếu cần
dailySheet.appendRow(['Tên công việc', 'Ngày bắt đầu', 'Ngày kết thúc', 'Người phụ trách']);
}
// Xóa dữ liệu cũ trong sheet ngày để tránh trùng lặp
if (dailySheet.getLastRow() > 1) {
dailySheet.getRange(2, 1, dailySheet.getLastRow() - 1, dailySheet.getLastColumn()).clearContent();
}
for (var i = 1; i < values.length; i++) { // Bắt đầu từ hàng 1 để bỏ qua tiêu đề
var row = values[i];
var startDate = new Date(row[1]); // Cột Ngày bắt đầu
var endDate = new Date(row[2]); // Cột Ngày kết thúc
// Kiểm tra nếu công việc đang diễn ra hoặc bắt đầu hôm nay
if (startDate <= today && endDate >= today) {
dailySheet.appendRow(row);
}
}
}
Script này có thể tùy biến thêm nhiều chức năng khác như tự động chạy hàng ngày, phân loại công việc, gửi thông báo... Nếu ai có kinh nghiệm về Apps Script hoặc muốn thảo luận thêm về các ứng dụng tự động hóa với Google Workspace thì vào đây trao đổi nhé!