# Bài 1: Khai Báo Biến và Đọc Ghi Ô – Dải Ô (Cell / Range)

#### Nội dung

<https://hocggsheet.com/khai-bao-bien-doc-ghi-o-dai-o-cell-range/>

* Cách khai báo biến trong một hàm của Google App Script
* Đọc ghi thông của một ô (cell) hoặc dải ô (range) trong Google Sheet bằng Google App Script

#### Tóm tắt

* Google Sheet có 4 phân lớp biến: Application -> Spreadsheet -> Sheet -> Range. Để gọi 1 phân lớp sau, thì đầu tiên, bạn phải gọi các phân lớp đứng đằng trước nó ra
* **getRange()** trả về **vị trí** của biến trong ngoặc
* **getValue()** là hàm **lấy giá trị** của biến trong ngoặc
* **setValue()** cho phép **ghi giá trị** trong ngoặc vào biến đằng trước
* **Logger.log()** là hàm **ghi giá trị** trong ngoặc **vào&#x20;*****nhật kí (log)***

### I. Khai báo biến

#### **Quy tắc**

Trước khi giới thiệu cách khai báo, mình muốn các bạn hiểu rõ quy tắc khai báo sau đây. Nó tuy đơn giản nhưng lại vô cùng quan trọng vì chúng ta sẽ dùng nó khi viết hầu hết các chương trình trên App Script.

Google Sheet có 4 phân lớp biến:

Application -> Spreadsheet -> Sheet -> Range

Để gọi 1 phân lớp sau, thì đầu tiên, bạn phải gọi các phân lớp đứng đằng trước nó ra. Ví dụ, khi muốn làm việc với Spreadsheet, thì bạn phải gọi Application ra. Muốn làm việc với Sheet, thì phải gọi Application -> Spreadsheet. Muốn gọi range (ô / dải ô) thì phải gọi\
Application -> Spreadsheet -> Sheet.

#### 1. Khai báo Application

Để khai báo Application bạn dùng cấu trúc như sau:<br>

```
var app = SpreadsheetApp;
```

Application là phân lớp đầu tiên khi bạn làm việc với App Script – Sheet. Nói một cách ngắn gọn, hàm trên có chức năng gọi ra chương trình Google Sheet. Đây là hàm bắt buộc, nó sẽ xuất hiện trong hầu hết các bài chia sẻ của mình. Tuy nhiên sau này chúng ta sẽ tiến hành gộp chung nó với hàm bên dưới (Spreadsheet). Còn trong bài này, tạm thời mình tách riêng từng phần để các bạn dễ hiểu.

#### 2. Khai báo Spreadsheet

```
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
```

Spreadsheet là phân lớp thứ 2, đứng dưới Application. Như bạn biết, trong Google Drive, bạn có thể tạo nhiều file Google Sheet khác nhau. Từng file lại có từng tên khác nhau. Chúng ta dùng hàm getActiveSpreadsheet() để gọi ra file Google Sheet mà chúng ta đang thao tác.

Để biết tại sao phải có SpreadsheetApp đứng trước, bạn vui lòng kéo lên trên để đọc lại Quy tắc

#### 3. Khai báo Sheet

![](https://i2.wp.com/hocggsheet.com/wp-content/uploads/2018/12/1.png?w=696\&ssl=1)

Phân lớp thứ 3 là Sheet. Trong một file Google Sheet sẽ có nhiều sheet nhỏ. Ví dụ trong hình là sheet0, sheet1, và sheet2.

Để khai báo 1 sheet, bạn dùng cú pháp như sau:

```
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
```

Vẫn theo Quy tắc, bạn phải gọi cả Application và Spreadsheet ra trước.

#### 4. Khai báo Ô / Dải Ô (Range)

Ô hoặc Dải ô là phân lớp nhỏ nhất của 1 file Google Sheet. Có nhiều cách để gọi 1 ô hoặc dải ô. Sau đây mình giới thiệu bạn các cách chính mà mình thường dùng:

* **getActiveCell()** : ô mà bạn đang chọn trong file Google Sheet
* **getActiveRange()** : dải ô mà bạn đang chọn trong file Google Sheet
* **getRange()** : có thể gọi ra ô hoặc cả dải ô bất kì trong ngoặc

Ví dụ cách sử dụng:

```
var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveCell();
```

Cuối cùng, chúng ta đặt 4 biến trên vào trong cùng 1 function:

```
function myFunction() {
  var app = SpreadsheetApp;
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveCell();
}
```

Trên thực tế, chúng ta ít khi làm việc với phân lớp Application, nên sẽ không dùng cả 4 biến để khai báo như vậy. Ở bài sau, mình sẽ hướng dẫn các bạn cách thu gọn những dòng lệnh trên.

### II. Đọc và ghi thông tin Ô (cell) hoặc Dải ô (range)

Trước khi tiến hành đọc ghi ô hoặc dải ô, bạn cần phải khai báo được vị trí của ô đó bằng hàm getRange().

![](https://i1.wp.com/hocggsheet.com/wp-content/uploads/2018/12/2-1.png?w=696\&ssl=1)

Ví dụ, mình muốn đọc ghi thông tin của ô B1, là 100000. Thì đầu tiên mình phải gọi ra được vị trí của ô **B1** trong bảng tính “**sheet1**“, trong file “**Bài 1**“, và trong ứng dụng **Google Sheet**.

Để gọi vị trí của 1 ô hoặc dải ô, chúng ta dùng hàm **getRange()**

**getRange() trả về vị trí của biến trong ngoặc**

*hocggsheet.com*

Hàm **getValue()** có tất cả 4 cách dùng. Trong bài này, mình sử dụng cách dùng thứ nhất (a1Notation). Nghĩa là bỏ tên của ô hoặc dải vô vào trong dấu ngoặc kép (” “)

Ví dụ, để gọi vị trí ô B1, mình viết: getRange(“B1”). Cụ thể, chúng ta viết lại như sau:

```

function myFunction() {
  var app = SpreadsheetApp;
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("B1");
}
```

Sau khi dùng biến **range** để gọi vị trí ô B2, ta tiếp tục sử dụng hàm **getValue()** để *lấy giá trị* “100000” trong ô B2 ra.

**getValue() là hàm lấy giá trị của biến trong ngoặc**

Cách dùng:

```

range.getValue();
```

Tuy nhiên, chúng ta sẽ bỏ dòng lệnh trên vào hàm Logger.log()

**Logger.log() là hàm ghi giá trị trong ngoặc vào trong&#x20;*****nhật kí (log)***

*hocggsheet.com*

```
function myFunction() {
  var app = SpreadsheetApp;
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("B1");

  Logger.log(range.getValue);
}

```

Chúng ta bấm “Chạy” để thực hiện chương trình. Sau đó bấm “Xem” -> Nhật kí để xem file nhật kí (bản tiếng Anh: View -> Log)

Cách mở file Nhật kí (log)![](https://i1.wp.com/hocggsheet.com/wp-content/uploads/2018/12/4.png?w=696\&ssl=1)

![](https://i2.wp.com/hocggsheet.com/wp-content/uploads/2018/12/3.png?w=696\&ssl=1)

Trong file log (nhật kí) đã hiện giá trị của ô B1, là 100000

Tiếp theo, để ghi giá trị vào ô hoặc dải ô, chúng ta dùng hàm **setValue()**. Nếu giá trị trong ngoặc là chữ cái thì bạn phải đặt trong dấu ngoặc kép (“”), còn nếu là số thì không cần.

**setValue() cho phép ghi giá trị trong ngoặc vào biến đằng trước**

*hocggsheet.com*

Ví dụ, mình muốn ghi giá trị “100” vào ô B2. Mình sẽ viết là:

```
range.setValue(100);
```

Ở trong clip hướng dẫn, mình có hướng dẫn các bạn cách ghi giá trị của ô B1 (100000) vào ô B8. Để làm vậy, trước tiên chúng ta cần khai báo vị trí của ô B8 và gán nó vào 1 biến bất kì. Mình đã dùng biến “dich” để làm.

Đồng thời, mình cũng dùng thêm 1 biến “giatri” để lấy giá trị 100000 của ô B1.

```
var dich = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("B8");
var giatri = range.getValue();
```

Tiếp theo, chúng ta dùng lệnh **setValue** để thực hiện yêu cầu. Cả bài sẽ được như sau:

```
function myFunction() {
  var app = SpreadsheetApp;
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("B1");
  
  var dich = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("B8");
  var giatri = range.getValue();
  
  Logger.log(range.getValue());
  
  dich.setValue(giatri);
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://javascriptuse.gitbook.io/advanced/bai-1-khai-bao-bien-va-doc-ghi-o-dai-o-cell-range.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
