---
description: https://hocggsheet.com/doc-ghi-mang-array-app-script/
---

# Bài 10: Đọc Ghi Mảng (Array) App Script

Mảng (Array) là một trong những thành phần cơ bản và không thể thiếu của Java Script cũng như App Script. Để sử dụng mảng thành thạo, bạn sẽ cần nắm chắc kiến thức cơ bản. Trong bài này, hocggsheet.com sẽ giới thiệu đến với các bạn cách Đọc Ghi Mảng từ App Script ra Google Sheet.

### Vài điều cần nắm rõ

* Đọc ghi mảng từ App Script ra Google Sheet khác với ghi dải ô ra dải ô trong Google Sheet vì nó yêu cầu khắt khe hơn
* Hàm [getValues() và setValues()](https://hocggsheet.com/cac-ham-lay-dat-gia-tri-getrange-getvalues-setvalues/) luôn trả về kết quả dưới dạng Mảng 2 chiều
* Tùy dải ô có kích thước hàng cột như thế nào mà ta sử dụng các mảng tương ứng

### File luyện tập cho phần Đọc Ghi Mảng

Các bạn Tạo bản sao (Make a copy) về Drive file bên dưới để tiến hành luyện tập nhé

[https://docs.google.com/spreadsheets/d/1A87WquX2EqGaRy4hIAszP9ztofLovS7fbN\_l9-9t8Is/edit?usp=sharing](https://docs.google.com/spreadsheets/d/1A87WquX2EqGaRy4hIAszP9ztofLovS7fbN_l9-9t8Is/edit?usp=sharing)

### 1. Dải ô có 1 hàng – nhiều cột

Cho dải ô A1:C1

![](https://i0.wp.com/hocggsheet.com/wp-content/uploads/2019/01/1-2.jpg?resize=381%2C74\&ssl=1)

Cho dải ô A1:C1 như hình, dải ô này có kích thước là 1 hàng và 3 cột. Mục tiêu của chúng ta hiện giờ là ghi mảng **arr** có 3 phần từ a, b, c vào dải ô trên

```
var arr = ['a','b','c'];
```

Tuy nhiên, nếu chỉ đơn thuần là dùng setValues() thì chắc chắn sẽ xảy ra lỗi

```
function docGhiMang1() {
   var ss = SpreadsheetApp.getActive();
   var arr = ['a','b','c'];
  
   ss.getRange('A1:C1').setValues(arr);
 }
```

Lỗi khi đọc ghi mảng

![](https://i1.wp.com/hocggsheet.com/wp-content/uploads/2019/01/4-error.jpg?resize=696%2C211\&ssl=1)

Để giải quyết vấn đề này, trước tiên chúng ta cần biết định dạng của mảng arr và dải ô A1:C1 là gì. Ở đây mình sẽ dùng getValues() để ghi 2 cái này vào file log

```
function docGhiMang1() {
   var ss = SpreadsheetApp.getActive();
   var arr = ['a','b','c'];

   var range = ss.getRange('A1:C1').getValues();   
   Logger.log(arr);
   Logger.log(range);
 }

```

![](https://i0.wp.com/hocggsheet.com/wp-content/uploads/2019/01/5-1.jpg?resize=696%2C460\&ssl=1)

Như các bạn đã thấy, mảng arr định dạng là Mảng 1 chiều, được bao bọc bởi 1 cặp dấu ngoặc vuông ở đầu và cuối. Còn dải ô A1:C1 là mảng 2 chiều, gồm có 1 _phần tử mẹ_ và bên trong nó có 3 phần tử con.

Câu hỏi đặt ra là: làm thế nào để chuyển từ _mảng 1 chiều_ về _mảng 2 chiều có 1 phần tử mẹ và nhiều phần tử con_

Rất đơn giản thôi, bạn chỉ cần thêm 1 cặp dấu ngoặc vuông ở trước và sau mảng arr

```
function docGhiMang1() {
   var ss = SpreadsheetApp.getActive();
   var arr = ['a','b','c'];

   var range = ss.getRange('A1:C1').getValues();
   Logger.log([arr]); //Thêm vào ở đây
   Logger.log(range);
 }

```

![](https://i1.wp.com/hocggsheet.com/wp-content/uploads/2019/01/6-1.jpg?resize=696%2C457\&ssl=1)

Vậy là ta đã chuyển đổi thành công giữa mảng 1 chiều arr về định dạng của dải ô A1:C1. Bây giờ ta mới có thể dùng setValues() để ghi \[arr] vào A1:C1

```
function docGhiMang1() {
   var ss = SpreadsheetApp.getActive();
   var arr = ['a','b','c'];

   ss.getRange('A1:C1').setValues([arr]);
 }

```

### 2. Dải ô có 1 cột – nhiều hàng

Dải ô A4:A6

![](https://i1.wp.com/hocggsheet.com/wp-content/uploads/2019/01/2-3.jpg?resize=158%2C164\&ssl=1)

Tiếp theo là dải ô A4:A6. Trước khi Đọc Ghi mảng, hãy cùng hocggsheet.com phân tích một chút nhé

A4:A6 là dải ô có 1 cột và 3 hàng. Định dạng của nó sẽ rất khác so với dải ô A1:C1 ở trên. Trước tiên, hãy thử ghi mảng arr gồm 3 kí tự a, b, c và A4:A6 ra file log

```
function docGhiMang2() {
   var ss = SpreadsheetApp.getActive();
   var arr = ['a','b','c'];

   var range = ss.getRange('A4:A6').getValues();
   Logger.log(arr);
   Logger.log(range);  
 }

```

![](https://i0.wp.com/hocggsheet.com/wp-content/uploads/2019/01/7-1.jpg?resize=696%2C458\&ssl=1)

Như ở trên mình đã nói, mảng arr là mảng 1 chiều. Còn khi dùng getValues để lấy giá trị của dải ô A4:A6, thì ta lại được mảng 2 chiều. Bao gồm _3 phần tử mẹ_ (được bao bọc bởi \[ ]), mỗi phần tử mẹ có _1 phần tử con_

Vậy làm thế nào để chuyển đổi mảng 1 chiều thành mảng 2 chiều có nhiều phần tử mẹ, mỗi phần tử mẹ có 1 phần tử con?

Câu trả lời là dùng [vòng lặp For](https://hocggsheet.com/vong-lap-for-app-script/) kết hợp với hàm push() của Java script

```
function docGhiMang2() {
   var ss = SpreadsheetApp.getActive();
   var arr = ['a','b','c'];
   var arr2 = [];

   var range = ss.getRange('A4:A6').getValues();
   for (var i = 0; i<3; i++) {
     arr2.push([arr[i]]);
   }
   Logger.log(arr2);
   Logger.log(range);
 }

```

#### Chú thích

* arr2 là mảng đã chuyển đổi của mảng arr
* push() là hàm cho phép “đẩy” những phần tử trong ngoặc vào trong mảng đằng trước
* Bằng cách thêm dấu ngoặc vuông như thế này \[arr\[i]], ta đã biến mỗi phần tử của arr thành 1 mảng riêng. Tóm lại, “đẩy” mảng 1 chiều vào trong mảng 1 chiều khác, thì ta sẽ được mảng 2 chiều

Kết quả file log gồm mảng arr2 và dải ô A4:A6

![](https://i2.wp.com/hocggsheet.com/wp-content/uploads/2019/01/8-1.jpg?resize=696%2C460\&ssl=1)

Như vậy, mảng arr2 mới đã có định dạng giống với dải ô A4:A6 – mảng 2 chiều với 3 phần tử mẹ, mỗi mẹ có 1 con. Bây giờ thì ta có thể ghi arr2 vào dải ô

```
function docGhiMang2() {
   var ss = SpreadsheetApp.getActive();
   var arr = ['a','b','c'];
   var arr2 = [];

   for (var i = 0; i<3; i++) {
     arr2.push([arr[i]]);
   }
   ss.getRange('A4:A6').setValues(arr2);
 }
```

### 3. Dải ô có nhiều hàng – nhiều cột

Dải ô A9:C11

![](https://i0.wp.com/hocggsheet.com/wp-content/uploads/2019/01/3-1.jpg?resize=382%2C279\&ssl=1)

Ví dụ cuối cùng là dải ô A9:C11, gồm 3 hàng và 3 cột. Hãy cùng xem định dạng của dải ô này trong file log trước:

```
function docGhiMang3() {
   var ss = SpreadsheetApp.getActive();
   var range = ss.getRange('A9:C11').getValues();
   Logger.log(range);
 }  
```

![File log](https://i2.wp.com/hocggsheet.com/wp-content/uploads/2019/01/9-1.jpg?resize=664%2C155\&ssl=1)

Ta thấy, dải ô A9:C11 là mảng 2 chiều có 3 phần tử mẹ (được bao bọc bởi \[ ]). Mỗi phần tử mẹ có 3 phần tử con bên trong

Vì dải ô có đến 9 giá trị, nên nếu muốn ghi 1 mảng vào dải ô thì mảng đó phải có kích thước và định dạng tương tự

```
function docGhiMang3() {
   var ss = SpreadsheetApp.getActive();
 
   var arr = [['a','b','c'],['d','e','f'],['g','h','i']];
   ss.getRange('A9:C11').setValues(arr);
 }

```
