Bài 3: Copy và Di Chuyển Dải Ô Sang 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óa howMany dòng, bắt đầu từ dòng rowPosition
deleteColumns(columnPosition, howMany) xóa howMany cột, bắt đầu từ cột columnPosition
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àm getValue(), 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àm copyTo() 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:
Chức năng của nó là gán các giá trị của dải ô A1:D7 vào biến giatri1, 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àm getValues() và setValues() nữa, mình viết lại như sau:
Câu lệnh range.copyTo(dich); thực hiện nhiệm vụ:
Đi đến dải ô trong biến range -> dải A1:D7
Copy các ô trong dải
Đ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
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:
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ẽ đặt sheet0 là sheet mà chúng ta lấy dữ liệu, và sheet1 là sheet đích đến.
Mục tiêu: di chuyển dải ô A1:D7 ở sheet0 và paste sang dải ô F8:I14 ở sheet1
Để xác định sheet khác, chúng ta dùng hàm getSheetByName()
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 ” “
Ở trên, mình đã thay biến sheet cũ thành sheet0 (để phân biệt với sheet1). Biến sheet1 sẽ đi đến sheet có tên là sheet1. Đồng thời biến dich lúc này sẽ là dải ô F8:I14 trong sheet1
Vì cách dùng của copyTo() và moveTo() là giống nhau nên mình chỉ minh họa moveTo() thôi, các bạn có thể tự thử với copyTo().
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:
Để 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óa howMany dòng, bắt đầu từ dòng rowPosition
deleteColumns(columnPosition, howMany) thực hiện việc xóa howMany cột, bắt đầu từ cột columnPosition
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:D7 từ sheet0 sang F8:I14 ở sheet1, khu vực A1:D7 sẽ 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
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àm getActiveSheet() 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àm getSheets() 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ủa getSheets() để 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ùng getActiveSheet() cho sheet0 và getSheetByName() cho sheet1. Bây giờ mình sẽ thay chúng bằng getSheets()
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ùng getSheets()[0], còn gọi sheet1 thì dùng getSheets()[1]
Trước khi chạy code. Bạn hãy chạy thử code để xem kết quả nhé ^^
Last updated