Chuyển dữ liệu từ Sheet về mảng trong Apps Script

Hướng dẫn chi tiết cách chuyển dữ liệu từ Sheet về mảng trong Apps Script

1. Tại sao chuyển dữ liệu từ sheet về mảng khi lập trình Apps

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:

Xử lý dữ liệu hiệu quả và nhanh hơn

    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();

Dễ dàng thao tác bằng vòng lặp

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
}

Tương thích với các hàm JavaScript chuẩn

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.

Làm nền tảng để ghi ngược dữ liệu lại vào Sheet

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));

2. Cách chuyển dữ liệu Sheet về mảng

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).

3. Ví dụ đơn giản về cách chuyển dữ liệu từ sheet thành mảng

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]);
  }
}


    Dòng i = 1 vì dòng đầu thường là tiêu đề.

4. Một số kinh nghiệm khi chuyển sheet thành mảng trong Apps Script

    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]
]


Nếu chỉ muốn một cột, bạn có thể dùng:

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

Bài viết liên quan:

Hướng dẫn chi tiết cách chuyển dữ liệu từ Sheet về mảng trong Apps Script