📢 Chào mừng các bạn đến với Rcom Dăm Yi blog - Kho tài liệu và giải pháp công nghệ bổ ích! Hệ thống liên tục cập nhật dữ liệu học tập mới.
Bài 7. Google Sheet & Apps Script Nâng Cao (Phần 8)

Thời gian dùng thử đã hết!

Phần mềm đã vượt quá 15 ngày dùng thử miễn phí. Vui lòng nhập mã bản quyền (License Key) để tiếp tục sử dụng.

Bài 7. Triển khai Web App & API (Phần 8)

1. Kiến thức bài học: Hàm doGet()

Bên cạnh việc thao tác trực tiếp trên bảng tính, Apps Script cho phép bạn xuất bản mã nguồn thành một Ứng dụng Web (Web App) có đường dẫn URL riêng biệt (script.google.com/.../exec).

Để làm được điều này, mã của bạn bắt buộc phải có hàm hệ thống doGet(e) hoặc doPost(e). Hàm này có 2 kiểu trả về chính:

  • Trả về HTML: Dùng HtmlService.createHtmlOutput() để tạo ra một trang web giao diện (UI) cho người dùng truy cập.
  • Trả về JSON: Dùng ContentService.createTextOutput() để biến file Sheet của bạn thành một Database API, cung cấp dữ liệu cho các phần mềm khác gọi tới.

2. Bài tập mẫu

Ví dụ 1: Trả về một trang Web (HTML)

Đề bài: Tạo một Web App cơ bản. Khi học sinh truy cập vào đường link, màn hình sẽ hiển thị câu chào mừng "Hệ thống Tra cứu Điểm - THPT Phan Chu Trinh".

Code Apps Script (Code.gs):

function doGet(e) {
  // Nội dung HTML muốn hiển thị
  let noiDungHienThi = "<h1 style='color:blue'>Hệ thống Tra cứu Điểm</h1>" + 
                       "<p>THPT Phan Chu Trinh - Chào mừng học sinh!</p>";
                       
  // Trả về dưới dạng giao diện Web
  return HtmlService.createHtmlOutput(noiDungHienThi);
}

* Sau khi viết code, bạn cần chọn Triển khai (Deploy) -> Tùy chọn triển khai mới -> Ứng dụng Web để lấy URL.

Mô phỏng truy cập URL Web App

Ví dụ 2: Tạo API trả về dữ liệu JSON (ContentService)

Đề bài: Ứng dụng điểm danh QR (hoặc app di động) cần lấy thông tin học sinh từ Google Sheet. Hãy viết hàm doGet trả về dữ liệu của học sinh dưới định dạng JSON.

Code Apps Script (Code.gs):

function doGet(e) {
  // Dữ liệu mô phỏng lấy từ Sheet (Ví dụ đọc bằng getValues())
  let duLieu = {
    "trangThai": "Thành công",
    "hocSinh": "Nay Phoan",
    "lop": "12A1",
    "diemNghienCuuKHKT": 9.5
  };
  
  // Chuyển Object thành chuỗi JSON
  let jsonString = JSON.stringify(duLieu);
  
  // Trả về API (Định dạng MIME là JSON)
  return ContentService.createTextOutput(jsonString)
                       .setMimeType(ContentService.MimeType.JSON);
}

Mô phỏng Request gọi API

Gửi GET Request tới URL của Apps Script để nhận dữ liệu cấu trúc:

3. Bài tập tự luyện

Bài tập: Nhận tham số từ URL (Query Parameters)

Đề bài: Biến e trong hàm doGet(e) chứa các tham số được truyền qua URL. Ví dụ URL là .../exec?id=HS001. Hãy viết mã đọc mã học sinh từ URL, nếu id là "HS001" thì trả về JSON tên là "Kpă Su", nếu không thì báo "Không tìm thấy".

Gợi ý:

  1. Lấy tham số: let maHS = e.parameter.id;
  2. Dùng lệnh if (maHS == "HS001") {...} để kiểm tra.
  3. Sử dụng ContentService.createTextOutput(...) để trả về kết quả JSON tương tự Ví dụ 2.
Bài 8. Google Sheet & Apps Script Nâng Cao (Phần 5)

Thời gian dùng thử đã hết!

Phần mềm đã vượt quá 15 ngày dùng thử miễn phí. Vui lòng nhập mã bản quyền (License Key) để tiếp tục sử dụng.

Bài 8. Giao diện HTML & Web App trong Apps Script

1. Kiến thức bài học: Dịch vụ HTML (HtmlService)

Thay vì chỉ dùng các hộp thoại `alert` hay `prompt` mặc định, bạn có thể thiết kế một giao diện hoàn chỉnh bằng mã HTML/CSS và nhúng nó vào Google Sheets dưới dạng Hộp thoại (Modal Dialog) hoặc thanh bên (Sidebar).

2 bước cốt lõi để tạo giao diện:

  • Bước 1: Tạo một tệp `.html` trong dự án Apps Script.
  • Bước 2: Dùng HtmlService.createHtmlOutputFromFile('TenFile') để biến HTML thành đối tượng UI, sau đó gọi SpreadsheetApp.getUi().showModalDialog() để hiển thị.
  • Giao tiếp: Từ giao diện HTML, bạn dùng google.script.run.TenHam() để kích hoạt một hàm bên trong file `Code.gs`.

2. Bài tập mẫu

Ví dụ 1: Hiển thị Hộp thoại Điểm danh (Modal Dialog)

Đề bài: Tạo một hộp thoại HTML tùy chỉnh báo cáo thành tích nghiên cứu KHKT của học sinh hiển thị ngay giữa màn hình Google Sheets.

Code Apps Script (Code.gs):

function hienThiHopThoai() {
  // Gọi tệp index.html trong dự án
  let html = HtmlService.createHtmlOutputFromFile('index')
      .setWidth(400)
      .setHeight(200);
      
  // Hiển thị hộp thoại
  SpreadsheetApp.getUi().showModalDialog(html, 'Thông báo hệ thống');
}

Code HTML (index.html):

<h2 style="color: #4CAF50; text-align: center;">Đã cập nhật hệ thống!</h2>
<p>Hồ sơ dự án mã QR của học sinh Kpă Su đã được lưu thành công vào bảng tính.</p>
<button onclick="google.script.host.close()">Đóng hộp thoại</button>

Mô phỏng Hộp thoại (Modal Dialog)

Ví dụ 2: Gửi dữ liệu từ Form HTML về Sheets

Đề bài: Xây dựng một biểu mẫu (Form) điểm danh. Khi người dùng nhập tên và bấm nút, giao diện HTML sẽ truyền dữ liệu về Apps Script để ghi vào bảng tính.

Code Apps Script (Code.gs):

// Hàm này được gọi từ HTML để ghi dữ liệu
function ghiDanhSach(tenHocSinh) {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // Ghi tên vào dòng cuối cùng của bảng tính
  sheet.appendRow([tenHocSinh, new Date()]); 
}

Code HTML (form.html):

<input type="text" id="hoTen" placeholder="Nhập tên học sinh...">
<button onclick="guiDuLieu()">Điểm danh</button>

<script>
  function guiDuLieu() {
    let ten = document.getElementById("hoTen").value;
    // Chuyển dữ liệu từ HTML sang GAS
    google.script.run.ghiDanhSach(ten);
    alert("Đã gửi dữ liệu: " + ten);
  }
</script>

Mô phỏng Giao tiếp google.script.run

Form Điểm Danh Trực Tuyến:


3. Bài tập tự luyện

Bài tập: Tạo Form nộp mã nguồn Python

Đề bài: Tạo một giao diện Sidebar HTML gồm 1 ô nhập "Tên học sinh" và 1 ô nhập "Link bài tập (Github/Drive)". Sử dụng google.script.run để gửi 2 dữ liệu này về Apps Script. Trong Apps Script, viết hàm nopBai(ten, link) để ghi 2 tham số này vào Sheets.

Gợi ý: Để hiện thanh bên thay vì hộp thoại, hãy dùng lệnh SpreadsheetApp.getUi().showSidebar(html) ở Code.gs.

Thông báo hệ thống

Đã cập nhật hệ thống!

Hồ sơ dự án mã QR của học sinh Kpă Su đã được lưu thành công vào bảng tính.

Bài 6. Google Sheet & Apps Script Nâng Cao (Phần 5)

Thời gian dùng thử đã hết!

Phần mềm đã vượt quá 15 ngày dùng thử miễn phí. Vui lòng nhập mã bản quyền (License Key) để tiếp tục sử dụng.

Bài 6. Google Sheets & Apps Script Nâng Cao (Phần 5)

1. Kiến thức bài học: Gửi Email tự động

Apps Script có khả năng kết nối trực tiếp với tài khoản Gmail của bạn thông qua đối tượng GmailApp. Điều này cho phép bạn đọc dữ liệu từ Sheets (như điểm số, thông báo) và gửi email tự động đến từng người.

Cú pháp cơ bản:

GmailApp.sendEmail(nguoiNhan, tieuDe, noiDung);
  • nguoiNhan: Địa chỉ email người nhận (Ví dụ: "hocsinh@gmail.com").
  • tieuDe: Chủ đề của email (Subject).
  • noiDung: Nội dung chính của email (Body). Có thể dùng nối chuỗi + để chèn dữ liệu cá nhân hóa.

2. Bài tập mẫu

Ví dụ 1: Gửi một email cơ bản

Đề bài: Viết script lấy email, tiêu đề và nội dung từ các ô trong Sheet để gửi một thông báo duy nhất.

Code Apps Script:

function guiEmailDon() {
  let nguoiNhan = "phuhuynh@example.com";
  let tieuDe = "Thông báo kết quả học tập";
  let noiDung = "Trường THPT Phan Chu Trinh trân trọng thông báo...";
  
  // Gọi lệnh gửi mail
  GmailApp.sendEmail(nguoiNhan, tieuDe, noiDung);
  Logger.log("Đã gửi email thành công!");
}

Chạy thử (Mô phỏng hàm sendEmail)

Người nhận:
Tiêu đề:
Nội dung:

Ví dụ 2: Gửi email hàng loạt (Mail Merge)

Đề bài: Bạn có danh sách học sinh gồm Tên, Email và Điểm. Hãy dùng vòng lặp để gửi email thông báo điểm cho từng người trong danh sách.

Code Apps Script:

function guiEmailHangLoat() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let data = sheet.getRange("A2:C3").getValues(); // Cột A: Tên, B: Email, C: Điểm
  
  for (let i = 0; i < data.length; i++) {
    let tenHS = data[i][0];
    let emailHS = data[i][1];
    let diemHS = data[i][2];
    
    let tieuDe = "Điểm thi của học sinh " + tenHS;
    let noiDung = "Chào em " + tenHS + ". Điểm thi của em là: " + diemHS;
    
    GmailApp.sendEmail(emailHS, tieuDe, noiDung);
  }
}

Mô phỏng Gửi hàng loạt

Tên (A) Email (B) Điểm (C) Trạng thái
Kpă Su kpasu@example.com 8.5 Chưa gửi
Nay Phoan nayphoan@example.com 9.0 Chưa gửi

3. Bài tập tự luyện

Bài tập: Gửi email cảnh báo học lực có điều kiện

Đề bài: Tương tự Ví dụ 2, nhưng bạn hãy thêm một câu lệnh điều kiện if vào trong vòng lặp for. Yêu cầu: Chỉ thực hiện lệnh GmailApp.sendEmail() đối với những học sinh có điểm dưới 5.0.

Gợi ý:

if (diemHS < 5.0) {
  GmailApp.sendEmail(emailHS, "Cảnh báo học tập", "Điểm của em dưới 5, cần cố gắng!");
}
            
Bài 6. Google Sheet & Apps Script Nâng Cao (Phần 3)

Thời gian dùng thử đã hết!

Phần mềm đã vượt quá 15 ngày dùng thử miễn phí. Vui lòng nhập mã bản quyền (License Key) để tiếp tục sử dụng.

Bài 5. Hàm Tự Tạo & Trình Kích Hoạt (Triggers)

1. Kiến thức bài học

Google Sheets có sẵn các hàm như =SUM(), =VLOOKUP(). Nhưng với Apps Script, bạn có thể tự tạo ra các hàm tùy chỉnh mang tên của riêng bạn và gõ trực tiếp vào ô trên bảng tính.

Trình kích hoạt đơn giản (Simple Triggers): Là các hàm được định nghĩa sẵn tên, tự động chạy khi một sự kiện xảy ra:

  • onOpen(e): Chạy ngầm ngay khi người dùng mở file Google Sheets. Thường dùng để tạo Menu công cụ tùy chỉnh trên thanh công cụ.
  • onEdit(e): Chạy khi có bất kỳ thay đổi dữ liệu nào trong một ô.

2. Bài tập mẫu

Ví dụ 1: Viết hàm tự tạo (Custom Function) xếp loại học lực

Đề bài: Viết một hàm tên là XEPLOAI(diem). Tại ô tính, khi gõ =XEPLOAI(8.5), hệ thống sẽ trả về chữ "Giỏi" (>=8), "Khá" (>=6.5), "TB" (>=5), còn lại là "Yếu".

Code Apps Script:

/**
 * Hàm xếp loại học lực dựa vào điểm số.
 * Dấu @customfunction giúp Google Sheets nhận diện đây là hàm để gợi ý.
 * 
 * @param {number} diem Điểm trung bình
 * @return Xếp loại tương ứng
 * @customfunction
 */
function XEPLOAI(diem) {
  if (diem >= 8.0) {
    return "Giỏi";
  } else if (diem >= 6.5) {
    return "Khá";
  } else if (diem >= 5.0) {
    return "Trung Bình";
  } else {
    return "Yếu";
  }
}

Trải nghiệm gõ hàm trực tiếp (Mô phỏng)

A (Điểm) B (Xếp loại)
2
=XEPLOAI(A2)
Kết quả ô B2: ...

Ví dụ 2: Tạo Menu tùy chỉnh với hàm onOpen()

Đề bài: Khi mở file Sheets, trên thanh công cụ sẽ tự động xuất hiện thêm một menu có tên "Công cụ iTeach", bên trong có nút "Trộn đề thi", khi bấm vào sẽ gọi hàm tronDe().

Code Apps Script:

function onOpen() {
  let ui = SpreadsheetApp.getUi();
  
  // Tạo menu mới
  ui.createMenu('Công cụ iTeach')
    .addItem('Trộn đề thi tự động', 'tronDe')
    .addSeparator() // Thêm đường gạch ngang phân cách
    .addItem('Đồng bộ điểm', 'dongBo')
    .addToUi(); // Hiển thị lên giao diện
}

function tronDe() {
  SpreadsheetApp.getUi().alert("Hệ thống đang tiến hành trộn đề...");
}

Mô phỏng sự kiện onOpen()

Tệp
Chỉnh sửa
Xem
Chèn
Định dạng
Công cụ iTeach ▼

3. Bài tập tự luyện

Bài tập: Viết Custom Function tính điểm xét tuyển

Đề bài: Viết một hàm TINH_DIEM_XET_TUYEN(toan, van, anh) trong Apps Script. Hệ thống yêu cầu: Điểm Toán nhân hệ số 2, Văn và Anh hệ số 1. Nếu tổng điểm >= 25, hàm trả về "Đỗ", ngược lại trả về "Trượt".

Hướng dẫn:

  1. Khai báo hàm: function TINH_DIEM_XET_TUYEN(toan, van, anh) {...}
  2. Tính tổng: let tong = (toan * 2) + van + anh;
  3. Dùng câu lệnh if(tong >= 25) { return "Đỗ"; } else { return "Trượt"; }
Bài 5. Google Sheet & Apps Script Nâng Cao (Phần 2)

Thời gian dùng thử đã hết!

Phần mềm đã vượt quá 15 ngày dùng thử miễn phí. Vui lòng nhập mã bản quyền (License Key) để tiếp tục sử dụng.

Bài 4. Google Sheets & Apps Script Nâng Cao (Phần 2)

1. Kiến thức bài học: Xử lý dữ liệu mảng

Khi dùng getValues(), dữ liệu trả về là một mảng 2 chiều (Array). Thay vì dùng vòng lặp for dài dòng để xử lý, JavaScript cung cấp các hàm nâng cao (Array Methods) giúp viết code ngắn gọn và chuyên nghiệp hơn:

  • filter(): Dùng để lọc ra các phần tử thỏa mãn một điều kiện nhất định (Ví dụ: Lọc danh sách học sinh giỏi).
  • map(): Dùng để biến đổi từng phần tử trong mảng thành một giá trị mới (Ví dụ: Cộng thêm 1 điểm cho tất cả học sinh).

2. Bài tập mẫu

Ví dụ 1: Lọc dữ liệu bằng filter()

Đề bài: Cột A và B chứa Tên và Điểm của học sinh. Hãy đọc dữ liệu và tạo ra một danh sách mới chỉ gồm những học sinh có điểm lớn hơn hoặc bằng 8.0.

Code Apps Script:

function locHocSinhGioi() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 1. Đọc dữ liệu (mảng 2 chiều)
  let data = sheet.getRange("A2:B4").getValues(); 
  
  // 2. Dùng filter lọc học sinh điểm >= 8.0
  // row[0] là Tên, row[1] là Điểm
  let danhSachGioi = data.filter(row => row[1] >= 8.0);
  
  // 3. Ghi kết quả sang cột D và E
  sheet.getRange(2, 4, danhSachGioi.length, 2).setValues(danhSachGioi);
}

Chạy thử mô phỏng hàm filter()

A (Tên) B (Điểm)
2Kpă Su8.5
3Nguyễn Văn A6.0
4Nay Phoan9.0

Kết quả ghi ra cột D & E:

Ví dụ 2: Biến đổi dữ liệu bằng map()

Đề bài: Do đề thi khó, giáo viên quyết định cộng thêm 0.5 điểm cho toàn bộ học sinh. Hãy đọc mảng điểm cũ, biến đổi thành mảng điểm mới và ghi đè lại.

Code Apps Script:

function congDiemHangLoat() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let vungDiem = sheet.getRange("B2:B4");
  
  let diemCu = vungDiem.getValues();
  
  // Dùng map để cộng 0.5 vào mỗi phần tử (row[0] vì mảng 2 chiều 1 cột)
  let diemMoi = diemCu.map(row => [row[0] + 0.5]);
  
  // Ghi đè lại mảng mới vào vị trí cũ
  vungDiem.setValues(diemMoi);
}

Mô phỏng hàm map()

Danh sách điểm hiện tại: 8.59.0

3. Bài tập tự luyện

Bài tập: Kết hợp filter và map (Trích xuất email)

Đề bài: Cột A là danh sách sinh viên, Cột B là trạng thái "Đã nộp" hoặc "Chưa nộp", Cột C là Email. Hãy viết code sử dụng kết hợp filter()map() để trích xuất ra một mảng 1 chiều chứa Email của những sinh viên "Chưa nộp" bài.

Gợi ý:

  1. let data = sheet.getRange("A2:C10").getValues();
  2. Lọc danh sách chưa nộp:
    let chuaNop = data.filter(row => row[1] == "Chưa nộp");
  3. Lấy ra mảng email:
    let emails = chuaNop.map(row => row[2]);
  4. Logger.log(emails);
Bài 4. Google Sheet & Apps Script Nâng Cao

Thời gian dùng thử đã hết!

Phần mềm đã vượt quá 15 ngày dùng thử miễn phí. Vui lòng nhập mã bản quyền (License Key) để tiếp tục sử dụng.

Bài 4. Google Sheets & Apps Script Nâng Cao

1. Kiến thức bài học

Trong thực tế, khi làm việc với hàng trăm học sinh hoặc hàng ngàn dòng dữ liệu, việc dùng vòng lặp đọc/ghi từng ô bằng getValue()setValue() sẽ làm code chạy cực kỳ chậm (vượt quá thời gian cho phép của Google).

Giải pháp tối ưu: Đọc và Ghi theo Mảng (Array) 2 chiều:

  • getValues(): Đọc toàn bộ một vùng dữ liệu (Range) và trả về một mảng 2 chiều [[dòng 1], [dòng 2], ...].
  • setValues(array2D): Ghi một mảng 2 chiều xuống trang tính chỉ trong 1 thao tác duy nhất. (Lưu ý: Kích thước mảng phải vừa khít với kích thước vùng chọn).

2. Bài tập mẫu

Ví dụ 1: Đọc mảng dữ liệu và Tính tổng

Đề bài: Cho một danh sách điểm thi từ ô A2 đến A4. Viết script lấy toàn bộ điểm này vào một mảng, tính tổng, và ghi kết quả vào ô B2.

Ý tưởng: Thay vì đọc 3 lần, ta dùng getRange("A2:A4").getValues() để lấy mảng. Sau đó dùng vòng lặp for cộng dồn, rồi ghi kết quả.

Code Apps Script:

function tinhTongDiemHangLoat() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 1. Đọc mảng 2 chiều (Kết quả dạng: [[8], [7], [9]])
  let data = sheet.getRange("A2:A4").getValues(); 
  
  let tong = 0;
  
  // 2. Vòng lặp tính tổng (data.length là số hàng)
  for (let i = 0; i < data.length; i++) {
    // data[i][0] nghĩa là hàng thứ i, cột đầu tiên trong mảng
    tong += Number(data[i][0]);
  }
  
  // 3. Ghi kết quả
  sheet.getRange("B2").setValue(tong);
}

Chạy thử mô phỏng mảng getValues()

A (Điểm số) B (Tổng điểm)
2
3
4

Ví dụ 2: Tạo mảng 2 chiều và Ghi hàng loạt (setValues)

Đề bài: Tạo một danh sách gồm 2 học sinh và điểm thi tương ứng bằng code. Ghi toàn bộ danh sách này vào bắt đầu từ ô C2.

Ý tưởng: Khai báo một mảng 2 chiều thủ công trong JS. Dùng getRange(row, col, numRows, numCols) để xác định vùng đích cần ghi, cuối cùng gọi setValues(mang).

Code Apps Script:

function ghiDuLieuMang() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 1. Tạo mảng 2 chiều (Mỗi mảng con là 1 hàng)
  let mangDuLieu = [
    ["Kpă Su", 8.5],
    ["Nay Phoan", 9.0]
  ];
  
  // 2. Xác định vùng chọn: Bắt đầu từ Hàng 2, Cột 3 (C), 
  // Số hàng = mangDuLieu.length (2), Số cột = mangDuLieu[0].length (2)
  let vungDich = sheet.getRange(2, 3, mangDuLieu.length, mangDuLieu[0].length);
  
  // 3. Ghi dữ liệu hàng loạt
  vungDich.setValues(mangDuLieu);
}

Mô phỏng hàm setValues()

3. Bài tập tự luyện

Bài tập: Phân loại học lực hàng loạt

Đề bài: Cột A (từ A2 đến A10) chứa danh sách Điểm Trung Bình của học sinh. Hãy viết script đọc toàn bộ mảng điểm này, dùng vòng lặp kiểm tra: nếu điểm >= 5 thì ghi "Đạt", ngược lại ghi "Không Đạt" vào một mảng mới. Cuối cùng dùng `setValues` ghi mảng kết quả đó vào cột B (từ B2 đến B10).

Gợi ý thuật toán:

  1. Khai báo mảng chứa điểm: let diem = sheet.getRange("A2:A10").getValues();
  2. Tạo một mảng rỗng để chứa kết quả: let ketQua = [];
  3. Dùng vòng lặp duyệt qua mảng `diem`, push ["Đạt"] hoặc ["Không Đạt"] vào mảng `ketQua`.
  4. Ghi mảng: sheet.getRange("B2:B10").setValues(ketQua);
Bài 3. Khai báo biến, hằng từ Google Sheet trong Apps Script

Bài 3. Khai báo biến, hằng lấy dữ liệu từ Google Sheets

1. Kiến thức bài học

Sức mạnh thực sự của Apps Script là khả năng tương tác với dữ liệu trong Google Sheets. Thay vì gán giá trị cố định, chúng ta sẽ khai báo biến và gán cho nó giá trị được đọc trực tiếp từ một ô (cell) trong bảng tính.

Cú pháp cốt lõi để lấy dữ liệu:

  • SpreadsheetApp.getActiveSpreadsheet(): Lấy file Google Sheet hiện tại.
  • getActiveSheet() hoặc getSheetByName("Tên_Sheet"): Chọn trang tính làm việc.
  • getRange("A1"): Chọn ô (ví dụ ô A1).
  • getValue(): Đọc giá trị bên trong ô đó.

2. Bài tập mẫu

Ví dụ 1: Tính tiền sau khi áp dụng mã giảm giá

Đề bài: Khai báo một hằng số là Giá gốc (500,000 VNĐ). Tỷ lệ giảm giá (%) được nhập tại ô B1 trên Google Sheets. Hãy lấy dữ liệu từ ô B1 gán vào biến, sau đó tính số tiền khách phải trả.

Code lời giải (Apps Script):

function tinhGiamGia() {
  // 1. Khai báo hằng số giá gốc
  const GIA_GOC = 500000;
  
  // 2. Kết nối tới Sheet hiện tại
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 3. Khai báo biến và lấy giá trị từ ô B1 (Ví dụ ô B1 chứa số 0.1 tương đương 10%)
  let tyLeGiam = sheet.getRange("B1").getValue(); 
  
  // 4. Tính toán
  let tienGiam = GIA_GOC * tyLeGiam;
  let giaCuoi = GIA_GOC - tienGiam;
  
  Logger.log("Số tiền cần thanh toán là: " + giaCuoi);
}

Mô phỏng Google Sheet (Nhập dữ liệu vào ô B1)

A B
1 Tỷ lệ giảm giá:

* Giá gốc (Hằng số): 500,000 VNĐ

Ví dụ 2: Lấy dữ liệu từ nhiều ô để tính Điểm Trung Bình

Đề bài: Một bảng điểm có Tên học sinh ở ô A2, Điểm Toán ở B2, Điểm Văn ở C2. Hãy khai báo biến để lấy dữ liệu từ các ô này và in ra thông báo kết quả học tập.

Code lời giải (Apps Script):

function tinhDiemTrungBinh() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // Đọc dữ liệu từ các ô trên Sheet gán vào biến
  let tenHS = sheet.getRange("A2").getValue();
  let diemToan = sheet.getRange("B2").getValue();
  let diemVan = sheet.getRange("C2").getValue();
  
  // Tính trung bình cộng
  let dtb = (diemToan + diemVan) / 2;
  
  // Nối chuỗi tạo thông báo
  let thongBao = "Học sinh " + tenHS + " có ĐTB là: " + dtb;
  
  Logger.log(thongBao);
}

Mô phỏng Google Sheet (Row 2)

A (Tên) B (Toán) C (Văn)
2

3. Bài tập tự luyện

Bài tập: Quản lý chi tiêu

Đề bài: Bạn có một file Google Sheet.
- Ô A1 chứa hằng số "Ngân sách tháng" (Ví dụ: 10,000,000).
- Ô A2 chứa "Tổng chi tiêu đến hiện tại" (Do bạn tự nhập số vào sheet).

Hãy viết một hàm kiemTraNganSach() thực hiện:

  1. Khai báo hằng số NGAN_SACH lấy dữ liệu từ ô A1.
  2. Khai báo biến chiTieu lấy dữ liệu từ ô A2.
  3. Tính số tiền còn lại (soDu = NGAN_SACH - chiTieu).
  4. Dùng Logger.log() để in ra câu: "Số dư ngân sách của bạn là: [Số tiền]".

Gợi ý: Cú pháp để lấy ô A1 là sheet.getRange("A1").getValue()