Biến & Kiểu Dữ Liệu
Apps Script sử dụng JavaScript hiện đại (ES2020+). Khai báo biến với const (không thay đổi) hoặc let (có thể thay đổi). Tránh dùng var trong code mới.
// Khai báo biến
const name = 'SheetStore'; // không thay đổi được
let count = 0; // có thể gán lại
// Kiểu dữ liệu cơ bản
const num = 42;
const price = 299000.5;
const str = 'Xin chào';
const bool = true;
const nothing = null;
// Mảng
const arr = [1, 2, 3, 'a', 'b'];
const firstItem = arr[0]; // 1
// Object
const product = { name: 'GS Template', price: 299000, active: true };
const productName = product.name; // 'GS Template'Hàm
Trong Apps Script, mỗi hàm cấp cao nhất (top-level function) đều có thể chạy trực tiếp từ editor. Hãy đặt tên hàm mô tả rõ chức năng.
// Hàm thông thường
function tinhTong(a, b) {
return a + b;
}
// Arrow function (ngắn gọn hơn)
const nhanDoi = (x) => x * 2;
// Hàm với giá trị mặc định
function chaoHoi(ten, loi = 'Xin chào') {
Logger.log(loi + ', ' + ten + '!');
}
// Gọi hàm
const ketQua = tinhTong(10, 20);
Logger.log(ketQua); // 30
chaoHoi('Nam'); // Xin chào, Nam!
chaoHoi('Lan', 'Chào buổi sáng'); // Chào buổi sáng, Lan!Vòng Lặp
Vòng lặp rất quan trọng khi xử lý nhiều hàng dữ liệu trong Sheets. Có nhiều kiểu vòng lặp:
// For loop cổ điển — dùng khi cần index
for (let i = 0; i < 10; i++) {
Logger.log('Hàng: ' + (i + 1));
}
// For...of — dùng khi lặp qua mảng
const items = ['Áo', 'Quần', 'Giày'];
for (const item of items) {
Logger.log(item);
}
// forEach — phong cách functional
items.forEach(function(item, index) {
Logger.log(index + ': ' + item);
});
// While loop
let n = 0;
while (n < 5) {
Logger.log(n);
n++;
}Điều Kiện
const doanThu = 500000000;
if (doanThu > 1000000000) {
Logger.log('Xuất sắc — trên 1 tỷ');
} else if (doanThu > 500000000) {
Logger.log('Tốt — trên 500 triệu');
} else {
Logger.log('Cần cải thiện');
}
// Toán tử ternary
const nhanXet = doanThu > 500000000 ? 'Đạt' : 'Không đạt';
// Switch case
const trangThai = 'Active';
switch (trangThai) {
case 'Active':
Logger.log('Đang hoạt động');
break;
case 'Inactive':
Logger.log('Ngừng hoạt động');
break;
default:
Logger.log('Không xác định');
}Xử Lý Mảng Nâng Cao
Khi làm việc với dữ liệu từ Sheets (luôn là mảng 2 chiều), các hàm mảng này rất hữu ích:
const data = [['Nam', 100], ['Lan', 200], ['Hùng', 150]];
// filter — lọc
const loiNhuan = data.filter(row => row[1] > 100);
// [['Lan', 200], ['Hùng', 150]]
// map — biến đổi
const tenList = data.map(row => row[0]);
// ['Nam', 'Lan', 'Hùng']
// reduce — tính tổng
const tongSo = data.reduce((sum, row) => sum + row[1], 0);
// 450
// find — tìm phần tử đầu tiên
const timThay = data.find(row => row[0] === 'Lan');
// ['Lan', 200]Mẹo debug: Dùng
console.log(JSON.stringify(obj)) để xem nội dung object/mảng. Trong Execution log, JSON giúp bạn thấy cấu trúc dữ liệu rõ hơn.