Giới thiệu về khả năng tùy chỉnh menu trong Google Sheets

Tùy chỉnh Menu trong Google Sheets? Có thể ư?

Chính xác hơn thì Google cho phép người dùng tạo thêm 1 bộ menu có thể tùy chỉnh được. Chức năng của các menu đấy sẽ được viết bởi người dùng dưới dạng các file script phục vụ cho các mục đích khác nhau.

Nhưng mà, cần knowhow gì để có thể làm được?

  • Cần biết về Google App Script(GAS), 1 phiên bản script được phát triển bởi Google base trên Javascript nên chỉ cần có 1 ít kiến thức cơ bản của Javascript là làm được.

GAS à, chưa nghe bao giờ, nó có thể làm gì nữa không? Hay chỉ đơn giản là copy và custom Javascipt thôi?

  • Tất nhiên Google có mục đích của họ, GAS cho phép người dùng giao tiếp với hầu hết ứng dụng của Google như Calendar, Contacts, Documents, Drive, Forms, Gmail, Group, Language, Maps, Sites, Slides, SpreadSheet... và thậm chí là Youtube, Adsense, Analytics, Google +, Classroom, Mirror, URL Shortenner… khi thiết lập GAS ở dạng nâng cao (có tính phí).

  • Ngoài ra cũng có thể dùng GAS để viết các add-on và đưa chúng lên G Suilt Market để ... bán.

  • Đọc thêm: https://www.quora.com/Google-App-Script-Is-it-worth-learning

  • Nghe thôi đã thấy phê thôi rồi phải không! Tóm lại, nếu thuần thục GAS thì có thể làm được nhiều thứ lắm đấy!

Toàn ưu điểm vậy, có nhược điểm không?

  • Có đấy, Google giới hạn thời gian tối đa thực thi một chương trình nên nếu app viết ra quá nặng, cần tính toán nhiều hoặc việc cần truy xuất quá nhiều data thì cũng cost kha khá thời gian. Tuy nhiên nếu chỉ phục vụ cho các mục đích đơn giản trong công việc thì không vấn đề gì.

  • Thêm 1 nhược điểm là mặc dù GAS được hỗ trợ quản lý source code bởi các "phiên bản" nhưng không thể nào so sánh như SVN hay GIT. May mắn là có thể cài add-on như Google Apps Script GitHub Assistant để quản lý source code bằng github. Nhưng do dùng github dưới dạng add-on nên nó cũng không thực sự thoải mái nếu không quen.

Giới thiệu nhiêu đó thôi nhỉ, let's give it a try!

※Chú ý: bài blog này được viết căn cứ trên phiên bản GSuit tiếng Việt nên nếu đang sử dụng phiên bản ngôn ngữ khác thì chịu khó đối chiếu nhé! Ngoài ra trình duyệt được sử dụng là Chrome 77.0.3865.90, các trình duyệt/phiên bản khác có thể không giống hoàn toàn.

  • Tạo mới GAS project
    Từ Menu Bar chọn "Công Cụ" => "Trình chỉnh sửa tập lệnh" => 1 GAS project sẽ được tạo ra nếu file Gsheet tương ứng chưa tồn tại bất cứ GAS project nào được tạo trước đó.
    Chrome sẽ tự mở ra 1 tab mới và điều hướng vào project đấy, cần đổi tên project trước khi bắt đầu code.

  • Tạo mới các menu cho file GSheets
    Xoá hàm myFunction() mặc định và thay thế hàm onOpen() như sau:


function onOpen( ){
 var ui = SpreadsheetApp.getUi();

 ui.createMenu('Restaurant Menu')
 .addSubMenu(ui.createMenu('1. New Order')
      .addItem('1.1 Sushi', 'newOrderSushi')
      .addItem('1.2 Sashimi', 'newOrderSashimi')
      .addItem('1.3 Phở', 'newOrderPho')
      .addItem('1.4 Cơm Tấm', 'newOrderComTam'))
 .addItem('2. Edit Order', 'editOrder')
 .addItem('3. Delete Order', 'deleteOrder')
 .addItem('4. Search Order', 'searchOrder')
 .addSeparator()
 .addToUi();
}

Hàm onOpen sẽ được chạy mỗi khi trang GSheets được truy cập, đoạn code ở trên nhằm khởi tạo các menu mỗi khi file được mở ra, kết quả:

  • Implement chức năng cho các menu
    Trong đoạn code bên dưới thì hàm addItem với param thứ nhất(1.1 Sushi) là tên của menu, param còn lại(newOrderSushi) là function tương ứng của menu đấy.

    
    addItem('1.1 Sushi', 'newOrderSushi')
    

    Thử tạo 1 popup khi chọn menu 1.1 Sushi bằng cách implement nội dung cho hàm newOrderSushi:

    
    function newOrderSushi()
    {
      Browser.msgBox("Bạn vừa đặt món Sushi thành công");
    }
    

    Kết quả khi thử click vào "1.1 Sushi"

Bài giới thiệu về khả năng tùy chỉnh menu trong GSheets xin tạm dừng ở đây. Hy vọng nó sẽ mang lại lợi ích gì đấy cho các công việc đòi hỏi sử dụng nhiều GSheets của bạn.
Còn rất nhiều functions hay ho được Google hỗ trợ đang chờ bạn khám phá, tham khảo thêm tại đây

Leave a Reply

Your email address will not be published. Required fields are marked *