Gán giá trị của sheet này qua sheet khác

Đây là Bài 3 trong chuỗi serie Học Ứng dụng Google App Script vào Google Sheet. Trong bài này, mục tiêu chính của chúng ta là tìm hiểu cách Copy và Di chuyển dải ô từ sheet này sang sheet khác. Clip hướng dẫn:

Nội dung

  • Copy và Di chuyển dải ô trong 1 sheet
  • Copy và Di chuyển dải ô từ sheet này sang sheet khác
  • Xóa hàng, xóa cột
  • Tóm tắt các hàm lấy phân lớp Sheet

Tóm tắt

  • copyTo()copy dải ô đứng trước và paste vào vị trí dải ô trong ngoặc
  • moveTo()chuyển dải ô đước trước vào trị ví dải ô trong ngoặc
  • getSheetByName()đi đến sheet có tên trong ngoặc
  • deleteRow()xóa dòng có số thứ tự trong ngoặc
  • deleteColumn()xóa cột có số thứ tự trong ngoặc
  • deleteRows(rowPosition, howMany)xóahowManydòng, bắt đầu từ dòngrowPosition
  • deleteColumns(columnPosition, howMany)xóahowManycột, bắt đầu từ cộtcolumnPosition

I. Copy và Di chuyển dải ô trong 1 sheet

Ở các bài trước thì mình đã giới thiệu các hàmgetValue(),getValues(),setValue()vàsetValues(). Các hàm này được thiết lập nhằm mục đích chính là lấy giá trị và đặt giá trị. Chúng ta đã lợi dụng điều đó để copy và paste dải ô. Tuy nhiên thì các hàm trên không chuyên dùng để làm vậy. Thay vào đó chúng ta nên dùng hàmcopyTo()vàmoveTo().

Ở Bài 2: Các hàm lấy giá trị và đặt giá trị dải ô,mình có đoạn code cuối cùng như sau:

0

1

2

3

4

5

6

7

8

9

10

11

function myFunction() {

  

  var ss    = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getActiveSheet();

  var range = sheet.getRange("A1:D7");

  

  var giatri1 = range.getValues();  

  var dich = sheet.getRange("F8:I14");

  

  dich.setValues(giatri1);

}

 

Chức năng của nó là gán các giá trị của dải ôA1:D7vào biếngiatri1, sau đó đi đến dải ôF8:I14để ghi các giá trị đó vào. Đây hoàn toàn giống với việc chúng ta đi copy và paste. App Script cung cấp 1 hàm chuyên dùng để làm điều này, đó làcopyTo(). Bây giờ, mình không dùng đến các hàmgetValues()vàsetValues()nữa, mình viết lại như sau:

0

1

2

3

4

5

6

7

8

9

10

function myFunction() {

  

  var ss    = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getActiveSheet();

  var range = sheet.getRange("A1:D7");

  var dich = sheet.getRange("F8:I14");

  

  range.copyTo(dich);

}

 

Câu lệnhrange.copyTo(dich);thực hiện nhiệm vụ:

  1. Đi đến dải ô trong biếnrange-> dảiA1:D7
  2. Copy các ô trong dải
  3. Đi đến dải ôF8:I14để Paste (Dán) vào

copyTo()là hàm copy dải ô đứng trước và paste vào vị trí dải ô trong ngoặc

Lưu ý rằng, biến “range” và biến “dich” phải có cùng kích thước (7 hàng, 4 cột). Tương tự dải ô mà các bạn muốn copy phải cùng kích thước hàng cột với dải ô mà cách bạn paste vào.

Cách sử dụng hàm moveTo cũng tương tự như copyTo

moveTo()là hàm di chuyển dải ô đước trước vào trị ví dải ô trong ngoặc

0

1

2

3

4

5

6

7

8

9

10

function myFunction() {

  

  var ss    = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getActiveSheet();

  var range = sheet.getRange("A1:D7");

  var dich = sheet.getRange("F8:I14");

  

  range.moveTo(dich);

}

 

Tuy nhiên vì bản chất là “move” nên nó dữ liệu ở dải ô cũ cũng không còn. Xem hình:

Gán giá trị của sheet này qua sheet khác
Gán giá trị của sheet này qua sheet khác

II. Copy / Di chuyển dải ô từ sheet này sang sheet khác

Để copy hoặc di chuyển dải ô từ sheet này sang sheet khác thì bạn phải xác định sheet mà bạn muốn copy / move vào (sheet đích đến). Để phân biệt, mình sẽ đặtsheet0là sheet mà chúng ta lấy dữ liệu, vàsheet1là sheet đích đến.

Mục tiêu: di chuyển dải ôA1:D7ởsheet0và paste sang dải ôF8:I14ởsheet1

Để xác định sheet khác, chúng ta dùng hàmgetSheetByName()

getSheetByName()là hàm đi đến sheet có tên trong ngoặc

Lưu ý tên phải để trong dấu ngoặc kép ” “

0

1

2

3

4

5

6

7

8

9

10

11

function myFunction() {

  

  var ss    = SpreadsheetApp.getActiveSpreadsheet();

  var sheet0 = ss.getActiveSheet();

  var sheet1 = ss.getSheetByName("sheet1");

  var range = sheet0.getRange("A1:D7");

  var dich = sheet1.getRange("F8:I14");

  

  range.moveTo(dich);

}

 

Ở trên, mình đã thay biếnsheetcũ thànhsheet0(để phân biệt vớisheet1). Biếnsheet1sẽ đi đến sheet có tên là sheet1. Đồng thời biếndichlúc này sẽ là dải ôF8:I14trongsheet1

Vì cách dùng củacopyTo()vàmoveTo()là giống nhau nên mình chỉ minh họamoveTo()thôi, các bạn có thể tự thử vớicopyTo().

III. Xóa hàng, xóa cột bằng App Script

Để xóa 1 hàng hoặc 1 cột trong 1 sheet, các bạn sử dụng hàm deleteRow() hoặc deleteColumn()

deleteRow()thực hiện việc xóa dòng có số thứ tự trong ngoặc

deleteColumn()thực hiện việc xóa cột có số thứ tự trong ngoặc

Ví dụ (không liên quan đến đoạn code trên), mình muốn xóa hàng 2 và cột 2 trong sheet đang thao tác (sheet0), mình viết như sau:

0

1

2

3

4

5

6

7

function xoahangcot() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getActiveSheet();

  

  sheet.deleteRow(2);

  sheet.deleteColumn(2);

}

 

Gán giá trị của sheet này qua sheet khác
Gán giá trị của sheet này qua sheet khác
Trước khi chạy đoạn code trên
Gán giá trị của sheet này qua sheet khác
Gán giá trị của sheet này qua sheet khác
Sau khi chạy đoạn code thực hiện xóa dòng 2 và cột 2

Để xóa nhiều hàng / nhiều cột trong 1 sheet, chúng ta sử dụng hàm deleteRows() hoặc deleteColumns()

deleteRows(rowPosition, howMany)thực hiện việc xóahowManydòng, bắt đầu từ dòngrowPosition

deleteColumns(columnPosition, howMany)thực hiện việc xóahowManycột, bắt đầu từ cộtcolumnPosition

Quay lại đoạn code chính của chúng ta. Mình muốn làm 1 việc như sau:

Sau khi đã di chuyển dải ôA1:D7từsheet0sangF8:I14ởsheet1, khu vựcA1:D7sẽ bị trống không. Bây giờ chúng ta sẽ xóa đi những hàng trống và cột trống đó. Có tất cả 7 dòng và 5 cột trống. Chúng ta được đoạn code hoàn chỉnh như sau:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

function myFunction() {

 

  var ss    = SpreadsheetApp.getActiveSpreadsheet();

  var sheet0 = ss.getActiveSheet();

  var sheet1 = ss.getSheetByName("sheet1");

  var range = sheet0.getRange("A1:D7");

  var dich = sheet1.getRange("F8:I14");

  

  range.moveTo(dich);

  sheet0.deleteRows(1, 7); //Xóa 7 dòng, bắt đầu từ dòng 1

  sheet0.deleteColumns(1, 5); //Xóa 5 cột, bắt đầu từ cột A

}

 

Vậy là mình chia sẻ xong phần xóa dòng / cột. Tiếp đến mình sẽ tóm tắt các hàm lấy sheet.

IV. Tóm tắt các hàm lấy phân lớp Sheet

Chúng ta đã biết hàmgetActiveSheet()sẽ lấy sheet mà chúng ta đang thao tác trên Google Sheet vàgetSheetByName()lấy sheet có tên ở trong ngoặc. Ngoài ra để lấy sheet, chúng ta còn 1 hàm nữa, đó làgetSheets().

Bạn có thể đọc thêm về hàmgetSheets()tại đây:

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getsheets

Mình muốn chia sẻ 1 cách dùng củagetSheets()để lấy sheet có số thứ tự trong bảng tính. Để giải thích bằng lời thì hơi khó, nên mình sẽ lấy ví dụ cho dễ hiểu. Ở đoạn code chính, mình đã dùnggetActiveSheet()cho sheet0 vàgetSheetByName()cho sheet1. Bây giờ mình sẽ thay chúng bằnggetSheets()

0

1

2

3

4

5

6

7

8

9

10

11

12

13

function myFunction() {

  

  var ss    = SpreadsheetApp.getActiveSpreadsheet();

  var sheet0 = ss.getSheets()[0];

  var sheet1 = ss.getSheets()[1];

  var range = sheet0.getRange("A1:D7");

  var dich = sheet1.getRange("F8:I14");

  

  range.moveTo(dich);

  sheet0.deleteRows(1, 7);

  sheet0.deleteColumns(1, 5);

}

 

Bằng việc bỏ số thứ tự của sheet trong bảng tính vào trong [ ], mình đã có kết quả tương tự. Lưu ý: sheet đầu tiên sẽ có số thứ tự là 0, sheet thứ 2 có số thứ tự là 1,… Đó là do trong Java Script, mảng bắt đầu đếm từ 0. Cho nên khi gọi sheet0 mình đã dùnggetSheets()[0], còn gọi sheet1 thì dùnggetSheets()[1]