October 24, 2021

Google Apps Script và Ứng Dụng Trong Google Sheet

Google Sheet – một ứng dụng web nằm trong bộ G Suite của Google không xa lạ gì đối với nhân viên văn phòng hoặc người dùng internet muốn sử dụng Excel  trên nền tảng web miễn phí. Tuy được xây dựng trên nền nhưng Google Sheet đã hỗ trợ rất nhiều tính năng cơ bản của excel. Mình không dám chắc là Google Sheet có thể thay thế được hoàn toàn Microsoft Excel nhưng nó có thể thay thế được khoảng 70-80% những tính năng của Microsoft Excel .

Google Apps Script  – một thư viện javascript  được xây dựng trên nền javascript native. Nhưng thay vì nó được chạy ở phía client thì Apps Script được chạy trên nền tảng Google Cloud. Apps Script được google sử dụng rất nhiều trên các ứng dụng web cũng như các ứng dụng trên Google Cloud Platform.

Hình 1: Các ứng dụng Google có thể sử dụng trực tiếp Apps Script
Hình 1: Các ứng dụng Google có thể sử dụng trực tiếp Apps Script

Trong bài viết này, mình tiếp tục sử dụng Apps Script nhưng sẽ sử dụng nó trong Google Sheet.

Mình cũng đã có một bài viết về cách tạo chatbot trên Google Cloud Platform như thế nào rồi. Ứng dụng đó cũng viết bằng Apps Script – Build Google ChatBot đơn giản Trên Google Cloud Platform

Trong bài viết này, mình tiếp tục sử dụng Apps Script nhưng sẽ sử dụng nó trong Google Sheet.

Chúng ta sẽ bắt đầu với Google Sheet.

Giả sử mình sẽ  đặt giá trị 10,000 và ô đầu tiên (cell (1,1)) của Sheet.
Hình 2: Giả sử mình sẽ đặt giá trị 10,000 và ô đầu tiên (cell (1,1)) của Sheet.

Giả sử mình sẽ  đặt giá trị 10,000 và ô đầu tiên của Sheet.

Trên màn hình của Google Sheet, chúng ta click vào Tools > Script editor.  Một màn hình của Apps Script sẽ được hiện ra cho bạn viết code javascript.

Màn hình Apps Script Editor.
Hình 3: Màn hình Apps Script Editor.
  1. Tên project cần lưu lại để dễ nhớ  – ở đây mình sẽ lưu với tên là Demo Apps Script.
  2. Tên hàm mình sẽ đặt những code của mình vào đây. Ở đây mình vẫn giữ lại tên mặc định như mới tạo project. Trong ứng dụng thực tế thì mình sẽ đặt tên sau cho dễ nhớ.
  3. Sau khi code xong thì mình click run để test hàm của mình.

Chúng ta sẽ bắt đầu code những dòng code đầu tiên để tương tác với Google Sheet.

function myFunction() {
  // lấy sheet đang active 
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    
  // lấy giá trị tại cell đầu tiên của sheet đang active
  var v = ss.getRange(1, 1).getValue();
  
  // Hiện thị giá trị đó bằng Dialog
   SpreadsheetApp.getUi().alert(v);
}

Các bạn copy và paste đoạn code trên và click Run.

Ghi chú: Lần đầu tiên chạy code thì Google cần bạn cho phép để thực thi code.

Yêu cầu được cấp quyền của Project vào tài khoản của bạn.
Hình 4: Yêu cầu được cấp quyền của Project vào tài khoản của bạn.

Sau khi click vào Run thì hãy quay lại tab của  Sheet, kết quả sẽ hiển thị như sau

Kết quả mong đợi.
Hình 5: Kết quả mong đợi.

ok . vậy đã kết nối thành công. Nhưng có cái gì đó không thân thiện cho lắm. Chẳng lẽ mỗi lần muốn chạy một chức năng gì đó thì phải vào project editor, chọn function để chạy hay sao? Không, mình phải làm cho nó thân thiện hơn nữa mới được.  Nhưng bằng cách nào đây ?. Mình có thể tạo ra một menu ngay trên màn hình của Google Sheet và khi nào sử dụng thì mình chỉ cần click chọn thôi.

Giờ mình sẽ đi tạo menu cho cái hàm của mình. Ở đây mình sẽ tạo một menu có tên là “Cloud ACE Demo” và nó có một menu con là “My Function‘.

// Hàm sẽ tự động gọi khi Sheet được open.
function onOpen() { 
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Cloud ACE Demo ")
  .addItem("My Function ", "myFunction")
  .addToUi();
}

Copy đoạn code đó vào. Và quay lại màn hình của Sheet nhấn F5 để refesh trang. Kết quả như sau:

Kết quả sau khi thêm menu.
Hình 6: Kết quả sau khi thêm menu.

Lúc này chúng ta sẽ thấy, trên menu của Sheet có thêm một menu nữa.  Thật tuyệt đúng ko nào? Giờ chúng ta click vào My Function thì chúng ta cũng sẽ có một kết quả như mong đợi.

Kết quả đạt được khi click vào menu Cloud ACE Demo / My Function.
Hình 7: Kết quả đạt được khi click vào menu Cloud ACE Demo / My Function.

Thật là đơn giản đúng không, bây giờ phức tạp thêm một chút. Bạn thử copy và chạy thử đoạn code bên dưới. Trong nó xem như thế nào nhé. !!

function myFunction() {
  // lấy sheet đang active 
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    
  //var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  // lấy giá trị tại cell (0,0)
  var v = ss.getRange(1, 1).getValue();
  
  // Hiện thị giá trị đó bằng Dialog
   SpreadsheetApp.getUi().alert(v);
}

function onOpen(){
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Cloud ACE Demo ")
  .addItem("My Function ", "myFunction")
  .addItem("Create Matrix", "createMatrix")
  .addToUi();
}
function createMatrix() {
  var ui = SpreadsheetApp.getUi(); // Same variations.
  var result = ui.prompt('Tạo ma trận nxn n', 'Vui lòng nhập n : ', ui.ButtonSet.OK_CANCEL);
  // Process the user's response.
  var button = result.getSelectedButton();
  var text = result.getResponseText();
  if (button == ui.Button.OK) {
    // User clicked "OK".
    try{
      var v  = parseInt(text);
      if(v >0){
        var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
        //clear data in sheet
        ss.clear();
        var i = 0;
        var j = 0;
        for (i =1;i	<=v;i++){
          for(j=1;j	<=v;j++){
            ss.getRange(i, j).setValue(i*j);
          }
        }
      }  
    }catch(err) {
       ui.alert('Dữ liệu nhập không hợp lệ.');
     }
  } else if (button == ui.Button.CANCEL) {
    // User clicked "Cancel".
    ui.alert('Bạn đã click vào button Cancel.');
  } else if (button == ui.Button.CLOSE) {
    // User clicked X in the title bar.
    ui.alert('Bạn đã click vào button Close.');
  }
}

Qua bài viết này, các bạn có để ý Apps Script trong Google Sheet có vai trò giống như Visual Basic Application (VBA) trong Microsoft Excel hay không? Nhưng có điểm lợi hại ở chỗ Apps Script có thể được chạy định kỳ để lấy dữ liệu ở BigQuery, Cloud SQL, … để hiển thị lên giao diện của Google Sheet để làm báo cáo. Hoặc có thể viết User Defined Functions (UDF)….Rất nhiều tính năng của Apps Script để các bạn khám phá thêm.

Các dịch vụ trên Google Cloud Platform mà Apps Script có thể truy cập được.
Hình : Các dịch vụ trên Google Cloud Platform mà Apps Script có thể truy cập được.

Qua ví dụ đơn giản này, các bạn có thể phát triển ứng dụng tạo báo cáo vào mỗi ngày hoặc gửi email một danh sách địa email, hoặc tự tạo thêm những tính năng dành riêng cho công ty của bạn,…ngay trên Google Sheet. Hy vọng các bạn sẽ có thêm trải nghiệm thú vị mà Google Cloud Platform mang lại cho bạn.

Khi thực hành có chỗ nào chưa hiểu, cần support, các bạn hãy liên hệ với các chuyên gia – Cloud Ace Việt Nam – để được hỗ trợ tốt hơn.

Bao Vuong

Vương hiện là Cloud Engineer của Cloud Ace Vietnam.+6 năm kinh nghiệm phát triển backend +2 năm kinh nghiệm Data Analytics +1 năm kinh nghiệm Machine Learning

View all posts by Bao Vuong →