Bài 2: Các Hàm Lấy Giá Trị và Đặt Giá Trị Dải Ô getRange – getValues – setValues

https://hocggsheet.com/cac-ham-lay-dat-gia-tri-getrange-getvalues-setvalues/

Bài 2: Các Hàm Lấy Giá Trị và Đặt Giá Trị Dải Ô getRange – getValues – setValues

3

Nội dung

Đây là bài thứ 2 trong serie Ứng dụng Google App Script vào Google Sheet.

Nội dung

  • Rút gọn code

  • Tất cả cách dùng của hàm getRange()

  • Hàm getValues()

  • Hàm setValues()

  • Nguồn tham khảo các hàm trong Google App Script

Tóm tắt

  • getRange(row, column): lấy vị trí 1 ô

  • getRange(row, column, numRows): lấy vị trí dải ô có nhiều hàng và 1 cột

  • getRange(row, column, numRows, numColumns): lấy vị trí dải ô có nhiều hàng nhiều cột

  • getValues(): lấy giá trị của dải ô

  • setValues(): ghi giá trị của dải ô trong ngoặc vào dải ô đằng trước

I. Rút gọn code

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

bài trước thì mình có bộ code hoàn chỉnh như sau:

function myFunction() {
  var app = SpreadsheetApp;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1");
  
  var giatri1 = range.getValue();
  
  var dich = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("E6");
  
  dich.setValue(giatri1);

}

Chức năng của nó là gán giá trị của ô A1 vào biến “giatri1”. Sau đó đi đến ô E6 và viết giá trị đó vào.

Ở bước khai báo biến, các bạn để ý là mình dùng tới 4 biến để khai báo, lần lượt với các phân lớp Application, Spreadsheet, Sheet và Range. Tuy nhiên, chúng ta không thường xuyên đụng tới phân lớp Application. Nên có thể gộp chung Application và Spreadsheet vào làm một. Viết lại như sau:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); //gộp chung application và spreadsheet vào làm 1 biến
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1"); 

  var giatri1 = range.getValue();
  var dich = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("E6");
  dich.setValue(giatri1);
}

Tiếp theo, các bạn để ý thấy biến “ss” và “sheet” có phần đầu giống nhau, nên chúng ta có thể thay biến “ss” vào phần đầu của biến “sheet”.

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1"); 

  var giatri1 = range.getValue();
  var dich = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("E6");
  dich.setValue(giatri1);
}

Tương tự ở biến “range” cũng có phần đầu giống biến “sheet” và “dich”, kết quả cuối cùng:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("A1"); 

  var giatri1 = range.getValue();
  var dich = sheet.getRange("E6");
  dich.setValue(giatri1);
}

Vậy là chúng ta đã làm gọn được bộ code dài dằng dặc ở bài trước. Tiếp theo, mình sẽ nói về các hàm getRange, getValues, và setValues.

II. getRange()

getRange là hàm lấy vị trị của biến trong ngoặc

Ở bài lần trước thì mình đã hướng dẫn các bạn cách sử dụng đầu tiên của getRange(), đó là a1Notation. Để sử dụng kiểu này, bạn chỉ cần bỏ ô hoặc dải ô vào trong ngoặc kép là được. Ví dụ:

var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1");

getRange() còn có 3 cách dùng nữa.

Cách 2: lấy vị trí của 1 ô

getRange(row, column)

Thay vì bỏ ô vào trong ngoặc kép như cách 1, thì bạn có thể ghi hàng (row) và cột (column) của ô đó ra. Ví dụ, để lấy vị trí của ô B8 (hàng 8, cột B -> cột 2), chúng ta viết như sau:

getRange(8, 2)

Lưu ý: cách này chỉ dùng để lấy vị trí của 1 ô, nếu bạn muốn lấy vị trí của dải ô, thì hãy xem tiếp cách 3 và 4

Cách 3: lấy vị trí của dải ô có nhiều hàng và 1 cột

getRange(row, column, numRows)

Giống như cách 2, bạn gõ hàng cột của ô đầu tiên trong dải ô lần lượt vào 2 biến row và column. Còn numRows có nghĩa là số lượng hàng trong dải ô. Ví dụ, mình muốn lấy vị trí của dải ô C5:C10 (bắt đầu từ dòng 5, cột C -> cột 3, từ C5 đến C10 có tất cả 6 dòng), mình sẽ viết như sau:

getRange(5, 3, 6)

Cách 4: lấy vị trí của dải ô có nhiều hàng nhiều cột

getRange(row, column, numRows, numColumns)

Các bạn lần lượt điền hàng cột của ô đầu tiên trong dải ô vào biến row và column, sau đó điền tiếp số lượng hàngsố lượng cột vào 2 biến numRows và numColumns

Ví dụ nếu mình muốn lấy vị trí của dải ô B3: F15 (bắt đầu từ hàng 3, cột 2 (B3), từ B3 đến F15 có 13 dòng và 5 cột), mình viết như sau:

getRange(3, 2, 13, 5)

III. getValues()

getValues() là hàm lấy giá trị của dải ô (lưu ý getValues có “s”)

Ví dụ: mình muốn lấy giá trị của dải ô A1:A4 và lưu nó vào biến “giatri1”

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("A1:A4"); 

  var giatri1 = range.getValues(); //bien giatri1 lưu giá trị của dải ô A1:A4, khác với biến giatri1 cũ, chỉ lưu giá trị của 1 ô A1
  var dich = sheet.getRange("E6");
  dich.setValue(giatri1);
}

IV. setValues()

setValues() là hàm ghi giá trị trong ngoặc vào biến đằng trước

Tiếp tục ví dụ trên, bây giờ mình muốn ghi giá trị của dải ô A1:D7 vào dải ô F8:I14. Đầu tiên, mình sửa lại biến “dich” để nó lấy vị trí của dải ô F8:I14.

Các bạn lưu ý: dải ô mà ta ghi giá trị vào phải có kích thước bằng với dải ô mà ta lấy giá trị. Ví dụ: kích thước của dải ô A1:D7 là 7 hàng, 4 cột, thì kích thước của dải ô biến “dich” cũng phải là 7 hàng, 4 cột -> F8:I14

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"); //dai ô được ghi vào phải có kích thước bằng với dải ô mà ta lấy giá trị
  dich.setValues(giatri1); //hàm setValues cho phép ghi nhiều giá trị của 1 dải ô, trong khi setValue chỉ ghi giá trị của 1 ô
}

Kết quả sau khi chạy hàm trên

Nếu các bạn muốn sử dụng cách dùng 4 của getRange(row, column, numRows, numColumns) thì đây (giống trong CLIP

function myFunction() {
  
  var ss    = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange(1,1, 7, 4);
  
  var giatri1 = range.getValues();  
  var dich = sheet.getRange(8, 6, 7, 4);
  
  dich.setValues(giatri1);

}

Nguồn tham khảo cách viết các hàm trong Google App Script

Mình xin giới thiệu với các bạn website này của Google:

https://developers.google.com/apps-script/

Ở đây bạn có thể tìm cách viết các hàm, cũng như ví dụ của chúng. Gõ hàm cần tìm vào ô Search là ra nhé.

Ở bài sau, mình sẽ hướng dẫn các bạn cách ghi dữ liệu từ sheet này sang sheet khác.

Last updated

Navigation

Lionel

@Copyright 2023