Dưới đây là 4 lý do chính giải thích vì sao ta cần chuyển dữ liệu từ Google Sheet về mảng (Array) trong lập trình:
Khi chuyển toàn bộ dữ liệu từ sheet về mảng một lần, bạn giảm số lần truy cập vào Sheet, giúp script chạy nhanh hơn rất nhiều.
Truy cập ô từng ô bằng getRange(...).getValue() lặp đi lặp lại sẽ rất chậm nếu dữ liệu lớn.
🔸 Ví dụ:
// Chậm: mỗi lần đọc 1 ô
for (let i = 2; i <= 1000; i++) {
let value = sheet.getRange(i, 1).getValue(); // 999 lần truy cập
}
// Nhanh: đọc 1 lần toàn bộ cột
let values = sheet.getRange(2, 1, 999).getValues();
Khi dữ liệu đã ở dạng mảng, bạn có thể dễ dàng:
Lọc dữ liệu
Tính tổng, trung bình
So sánh giá trị
Tìm kiếm…
🔸 Ví dụ:
let tong = 0;
for (let i = 1; i < data.length; i++) {
tong += data[i][2]; // cộng điểm ở cột thứ 3
}
Mảng có thể dùng với các hàm như:
.map()
.filter()
.forEach()
.sort()
➡️ Điều này giúp viết code ngắn gọn, hiện đại và dễ hiểu.
Bạn có thể:
xử lý dữ liệu trong mảng,
sau đó dùng setValues() để ghi lại cả bảng một lần, rất nhanh và gọn.
🔸 Ví dụ:
// Tăng điểm lên 1
for (let i = 1; i < data.length; i++) {
data[i][2] += 1;
}
sheet.getRange(2, 1, data.length - 1, data[0].length).setValues(data.slice(1));
Trong Google Apps Script, bạn có thể dùng:
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TênSheet");
let data = sheet.getDataRange().getValues();
🧠 Giải thích:
getActiveSpreadsheet(): lấy file Google Sheets đang chạy.
getSheetByName("TênSheet"): chọn một sheet cụ thể theo tên.
getDataRange(): lấy toàn bộ vùng có dữ liệu.
getValues(): trả về dữ liệu dạng mảng 2 chiều (array of arrays).
Giả sử bạn có bảng:
Họ tên | Tuổi | Điểm |
---|---|---|
An | 18 | 9.5 |
Bình | 19 | 8.0 |
Ta dùng đoạn mã sau:
function layDuLieu() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dulieu");
let data = sheet.getDataRange().getValues();
// In từng dòng ra log
for (let i = 1; i < data.length; i++) {
Logger.log("Họ tên: " + data[i][0] + ", Tuổi: " + data[i][1] + ", Điểm: " + data[i][2]);
}
}
getValues() trả về mảng 2 chiều, ví dụ:
[
["Họ tên", "Tuổi", "Điểm"],
["An", 18, 9.5],
["Bình", 19, 8.0]
]
let cot1 = sheet.getRange(2, 1, sheet.getLastRow() - 1).getValues();
Nếu chỉ cần 1 ô duy nhất, dùng:
let giaTri = sheet.getRange("B2").getValue(); // trả về giá trị đơn
Hướng dẫn chi tiết cách chuyển dữ liệu từ Sheet về mảng trong Apps Script