Đồng Bộ Google Calendar Với Google Sheets Bằng Apps Script
14 tháng 5, 2026
5 phút đọc
Tại Sao Đồng Bộ Calendar Với Sheets?
Google Calendar lưu lịch hẹn, Google Sheets lưu dữ liệu dạng bảng. Kết hợp hai công cụ qua Apps Script giúp bạn: tạo báo cáo thời gian làm việc, quản lý lịch nhân viên tập trung, đặt lịch hàng loạt từ danh sách và gửi nhắc nhở tự động.
Đọc Events Từ Calendar Vào Sheet
function syncCalendarToSheet() {
try {
const now = new Date();
const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59);
const calendar = CalendarApp.getDefaultCalendar();
const events = calendar.getEvents(startDate, endDate);
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Calendar Events') || ss.insertSheet('Calendar Events');
sheet.clearContents();
const headers = ['ID', 'Tiêu đề', 'Bắt đầu', 'Kết thúc', 'Địa điểm', 'Mô tả', 'Khách mời'];
sheet.getRange(1, 1, 1, headers.length).setValues([headers])
.setFontWeight('bold').setBackground('#4285F4').setFontColor('#FFFFFF');
if (events.length === 0) { console.log('No events found.'); return; }
const rows = events.map(ev => [
ev.getId(),
ev.getTitle(),
ev.getStartTime(),
ev.getEndTime(),
ev.getLocation() || '',
ev.getDescription() || '',
ev.getGuestList().map(g => g.getEmail()).join(', ')
]);
sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
sheet.getRange(2, 3, rows.length, 2).setNumberFormat('dd/MM/yyyy HH:mm');
sheet.autoResizeColumns(1, headers.length);
console.log('Synced ' + events.length + ' events.');
} catch (err) {
console.error('syncCalendarToSheet error: ' + err.toString());
throw err;
}
}
Tạo Events Hàng Loạt Từ Sheet
Sheet cần có headers: Tiêu đề | Ngày bắt đầu | Giờ bắt đầu | Địa điểm | Mô tả | Email khách | Event ID.
function createEventsFromSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Events To Create');
if (!sheet) throw new Error('Sheet "Events To Create" not found');
const data = sheet.getDataRange().getValues();
const headers = data[0];
const calendar = CalendarApp.getDefaultCalendar();
let created = 0;
for (let i = 1; i < data.length; i++) {
const row = data[i];
const eventIdCol = headers.indexOf('Event ID');
// Bỏ qua nếu đã tạo
if (eventIdCol >= 0 && row[eventIdCol]) continue;
if (!row[0] || !row[1]) continue;
try {
const startDate = new Date(row[1]);
if (row[2]) {
const t = String(row[2]).match(/(d+):(d+)/);
if (t) startDate.setHours(+t[1], +t[2], 0);
}
const endDate = new Date(startDate.getTime() + 60 * 60 * 1000);
const options = {};
if (row[3]) options.location = row[3];
if (row[4]) options.description = row[4];
if (row[5]) { options.guests = row[5]; options.sendInvites = true; }
const event = calendar.createEvent(row[0], startDate, endDate, options);
if (eventIdCol >= 0) sheet.getRange(i + 1, eventIdCol + 1).setValue(event.getId());
created++;
Utilities.sleep(200);
} catch (err) {
console.error('Row ' + (i + 1) + ': ' + err.toString());
}
}
console.log('Created ' + created + ' events.');
}
Nhắc Nhở Deadline Tự Động
// Chạy hàng ngày lúc 8h — nhắc việc 3 ngày tới
function sendDeadlineReminders() {
const today = new Date();
const threeDays = new Date(today.getTime() + 3 * 24 * 60 * 60 * 1000);
const events = CalendarApp.getDefaultCalendar().getEvents(today, threeDays);
if (events.length === 0) return;
let body = '<h2>Sự kiện sắp tới</h2><ul>';
events.forEach(ev => {
const days = Math.ceil((ev.getStartTime() - today) / 86400000);
body += '<li><strong>' + ev.getTitle() + '</strong> — '
+ ev.getStartTime().toLocaleString('vi-VN') + ' (' + days + ' ngày nữa)</li>';
});
body += '</ul>';
MailApp.sendEmail({ to: Session.getActiveUser().getEmail(), subject: 'Nhắc việc: ' + events.length + ' sự kiện', htmlBody: body });
}
Use Cases Thực Tế
- Lịch team: Sync calendar mỗi người vào sheet tổng hợp cho manager.
- Đặt lịch hẹn: Khách điền form → Apps Script tạo Calendar event tự động.
- Báo cáo giờ làm: Export events để tính tổng giờ theo dự án.
- Nhắc deadline dự án: Trigger hàng ngày gửi email nhắc công việc sắp đến hạn.
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp
Google Workspace Certified, 5+ years experience
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.