icon-mess
Chat Zalo
(24/7)
zalo

Cách sử dụng google apps script để tạo danh sách thả xuống đa lựa chọn trong google sheets

Việc tạo danh sách thả xuống trên Google Sheets giúp người dùng dễ dàng lựa chọn các tùy chọn có sẵn và tránh nhầm lẫn khi nhập liệu thủ công. Tuy nhiên, danh sách thả xuống mặc định chỉ cho phép chọn một mục duy nhất. Qua bài viết này, Công Ty Quảng Cáo Marketing Online Limoseo sẽ hướng dẫn cách sử dụng google apps script để tạo danh sách thả xuống đa lựa chọn trong google sheets

1. Cách sử dụng google apps script để tạo danh sách thả xuống đa lựa chọn trong google sheets (có lặp lại)

Để tạo một danh sách thả xuống cho phép nhiều lựa chọn, bạn cần thực hiện hai bước sau:

1.1 Tạo danh sách thả xuống bằng cách sử dụng danh sách các mục.

Thêm một chức năng trong Script Editor để cho phép nhiều lựa chọn trong danh sách thả xuống.

Để tạo danh sách thả xuống, hãy làm theo các bước sau:

  • Bước 1: Chọn ô mà bạn muốn tạo danh sách thả xuống.
  • Bước 2: Nhấp vào tùy chọn “Dữ liệu” trên thanh công cụ.
  • Bước 3: Trong menu xổ xuống, chọn tùy chọn “Xác thực dữ liệu”.
  • Bước 4: Trong hộp thoại Xác thực dữ liệu, đảm bảo “Phạm vi ô” tham chiếu đến ô mà bạn muốn tạo danh sách thả xuống.
  • Bước 5: Ở phần Tiêu chí, chọn tùy chọn “Danh sách từ phạm vi” và sau đó chọn phạm vi chứa các mục bạn muốn hiển thị trong danh sách thả xuống.
  • Bước 6: Nhấp vào nút “Lưu” để hoàn thành.

Bây giờ, danh sách thả xuống của bạn sẽ hiển thị trong ô được chỉ định. Khi nhấp vào mũi tên, bạn sẽ thấy danh sách các mục trong danh sách thả xuống.

Tuy nhiên, để cho phép nhiều lựa chọn trong danh sách thả xuống này, bạn cần thêm tập lệnh hàm trong Google Sheets Script Editor.

1.2 Thêm Google Apps Script để bật nhiều lựa chọn

Dưới đây là mã tập lệnh mà bạn sẽ phải sao chép và dán vào trình chỉnh sửa tập lệnh Script Editor (các bước được đề cập bên dưới phần sau mã):

function onEdit(e) {

var oldValue;

var newValue;

var ss=SpreadsheetApp.getActiveSpreadsheet();

var activeCell = ss.getActiveCell();

if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()==”Sheet1″) {

newValue=e.value;

oldValue=e.oldValue;

if(!e.value) {

activeCell.setValue(“”);

}

else {

if (!e.oldValue) {

activeCell.setValue(newValue);

}

else {

activeCell.setValue(oldValue+’, ‘+newValue);

}

}

}

}

Để thêm mã tập lệnh cho menu thả xuống đa lựa chọn vào phần mở rộng của Google Sheets, bạn có thể làm theo các bước sau đây:

  • Bước 1: Trên giao diện bảng Google Sheets đang làm việc, truy cập vào menu “Công cụ”.
  • Bước 2: Trong danh sách các tùy chọn, chọn “Trình chỉnh sửa Script”. Hành động này sẽ mở một cửa sổ mới cho phép chỉnh sửa mã.
  • Bước 3: Trong cửa sổ mã “Code.gs”, xóa toàn bộ mã hiện có và dán mã macro vào.
  • Bước 4: Bấm nút “Lưu” trên thanh công cụ (hoặc sử dụng phím tắt Control + S) để lưu thay đổi.
  • Bước 5: Đặt tên cho dự án (chỉ cần làm một lần) trong khung trống.
  • Bước 6: Đóng cửa sổ trình chỉnh sửa tập lệnh.

Sau khi hoàn tất các bước trên, bạn có thể quay lại trang tính và thử nghiệm các tùy chọn trong menu thả xuống. Ví dụ: bạn có thể chọn trước “Táo” và sau đó chọn “Chuối”. Sau khoảng một hoặc hai giây, nó sẽ hiển thị cả hai lựa chọn trong ô được chọn, được phân tách bằng dấu phẩy.

Lưu ý: Bạn sẽ thấy một biểu tượng tam giác màu đỏ ở góc trên cùng bên phải của ô, đây là bình thường không phải lỗi.

Ngoài ra, nếu bạn muốn tạo một danh sách thả xuống cho phép nhiều lựa chọn mà không được phép chọn trùng, bạn có thể sử dụng mã trong hướng dẫn phía dưới.

1.3 Cách mã trên hoạt động như thế nào?

Chúng ta bắt đầu phân tích mã này từng bước để hiểu cách nó hoạt động.

Mã bắt đầu bằng dòng “function onEdit(e)” – onEdit() là một hàm đặc biệt trên Google Sheets và được gọi là trình xử lý sự kiện. Hàm này được kích hoạt mỗi khi có sự thay đổi trong bảng tính của bạn. Vì muốn mã nhiều lựa chọn chạy mỗi khi một mục được chọn từ danh sách thả xuống, nên bạn nên đặt mã vào hàm onEdit().

Bây giờ, AppScript sẽ chuyển hàm này dưới dạng một đối tượng sự kiện như một đối số. Đối tượng sự kiện này sẽ chứa một số thông tin liên quan đến sự kiện được kích hoạt. Nếu bạn có kiến thức cơ bản về AppScript, bạn sẽ dễ hiểu bốn dòng đầu tiên của mã này.

var oldValue;

var newValue;

var ss=SpreadsheetApp.getActiveSpreadsheet();

var activeCell = ss.getActiveCell();

Trong 4 dòng đó, chúng ta đã khai báo hai biến: một (oldValue) sẽ giữ giá trị cũ của ô và một (newValue) sẽ giữ giá trị mới của ô. Trong khi đó, biến activeCell sẽ giữ ô hiện đang hoạt động đã được chỉnh sửa. Tuy nhiên, chúng ta không muốn mã chạy mỗi khi bất kỳ ô nào được chỉnh sửa, mà chỉ muốn nó chạy khi ô CA1 của Sheet1 được chỉnh sửa. Vì vậy, chúng ta cần sử dụng câu lệnh IF.

if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()==”Sheet1″)

Khi chúng ta thực hiện chỉnh sửa ô CA1 trên Sheet1, đoạn mã sẽ được thực thi. Nó sẽ kiểm tra số hàng và cột của ô hiện đang hoạt động và tên trang tính. Nếu số hàng là 1, số cột là 3 và tên trang tính đúng thì câu lệnh IF sẽ trả về giá trị TRUE và mã bên trong nó sẽ được thực thi. Dưới đây là mã được thực thi khi chúng ta ở trên ô bên phải

newValue = e.value;
oldValue = e.oldValue;

Trong đoạn mã trên, thuộc tính e.oldValue của đối tượng sự kiện e được sử dụng để lưu giữ giá trị trước đó của ô đang hoạt động. Trong trường hợp này, giá trị này sẽ là giá trị trước khi người dùng thực hiện lựa chọn thả xuống. Để lưu giữ giá trị này, chúng tôi gán nó cho biến oldValue.

Tương tự, thuộc tính e.value cũng là một thuộc tính của đối tượng sự kiện e, nó giữ giá trị hiện tại của ô đang hoạt động. Để lưu giữ giá trị này, chúng tôi gán nó cho biến newValue. Nếu không có tùy chọn nào được chọn, giá trị của evalue sẽ không xác định được. Khi điều này xảy ra, chúng tôi muốn đặt một giá trị trống trên ô A1 để tránh hiển thị bất kỳ thông tin gì. Điều này cũng xảy ra khi người dùng quyết định xóa tất cả các lựa chọn trước đó và khởi động lại từ đầu.

if (! e.value) {

activeCell.setValue (“”);

}

Nếu người dùng chọn một tùy chọn, thì các dòng sau câu lệnh else sẽ được thực thi. Bây giờ chúng tôi muốn xác định hành động cần thực hiện nếu một tùy chọn được chọn lần đầu tiên từ danh sách thả xuống. Trong trường hợp này, giá trị trước đó (e.oldValue) không được xác định.

if (! e.oldValue) {

activeCell.setValue (newValue);

Cuối cùng, hãy chỉ định những gì cần làm trong lần tiếp theo trở đi khi một tùy chọn được chọn. Việc này có nghĩa là khi cả e.value và e.oldValue chúng giữ các giá trị cụ thể.

else {

activeCell.setValue(oldValue+’, ‘+newValue);

}

Sau khi bạn nhập mã thành công, hãy lưu nó và thử chọn nhiều mục từ danh sách thả xuống. Bạn sẽ thấy tất cả các mục đã chọn của mình được hiển thị từng cái một, cách nhau bởi dấu phẩy.

Nếu có lỗi xảy ra, bạn có thể xóa ô và bắt đầu lại. Trong trường hợp này, chúng tôi muốn hiển thị cả giá trị trước đó và giá trị mới được chọn trong ô A1, cách nhau bởi dấu phẩy.

Lưu ý: Khi sử dụng đoạn mã này, bạn không thể chỉnh sửa một phần của chuỗi hoặc xóa một phần của nó. Nếu bạn muốn thực hiện bất kỳ thay đổi nào, bạn phải xóa tất cả nội dung của ô và bắt đầu lại từ đầu.

Nhưng nếu bạn chọn cùng một mục nhiều lần, nó sẽ được thêm vào danh sách lựa chọn của bạn. Điều này cho phép sự lặp lại. Tuy nhiên, thông thường, không ai muốn điều này.

2. Cách sử dụng google apps script để tạo danh sách thả xuống đa lựa chọn trong google sheets (không lặp lại)

Dưới đây là mã để tạo nhiều lựa chọn chứa trong menu thả xuống mà không cần lặp lại.

function onEdit(e) {

var oldValue;

var newValue;

var ss=SpreadsheetApp.getActiveSpreadsheet();

var activeCell = ss.getActiveCell();

if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()==’Sheet1′) {

newValue=e.value;

oldValue=e.oldValue;

if(!e.value) {

activeCell.setValue(“”);

}

else {

if (!e.oldValue) {

activeCell.setValue(newValue);

}

else {

if(oldValue.indexOf(newValue) <0) {

activeCell.setValue(oldValue+’,’+newValue);

}

else {

activeCell.setValue(oldValue);

}

}

}

}

}

Đoạn mã trên đang sử dụng ô C1 trên trang tính Sheet1 làm ví dụ. Tuy nhiên, nếu menu thả xuống của bạn nằm trong một ô hoặc trang tính khác, bạn cần sửa đổi mã để phù hợp. Dưới đây là phần mã để loại bỏ bất kỳ giá trị trùng lặp nào trong menu thả xuống:

if(oldValue.indexOf(newValue) <0) {

activeCell.setValue(oldValue+’, ‘+newValue);

}

else {

activeCell.setValue(oldValue);

}

Hàm indexof() được sử dụng để kiểm tra xem chuỗi oldValue có chứa chuỗi newValue hay không. Nếu có, nó sẽ trả về chỉ số xuất hiện đầu tiên của chuỗi trong oldValue. Ngược lại, nó sẽ trả về giá trị nhỏ hơn 0.

Nếu tùy chọn mới được chọn đã có trong danh sách, chúng tôi sẽ giữ nguyên danh sách. Nếu không, chúng tôi sẽ thêm tùy chọn mới được chọn vào danh sách bằng cách sử dụng dấu phẩy (‘,’) để phân tách các tùy chọn và hiển thị toàn bộ danh sách trong ô C1.

3. Nhiều lựa chọn trong trình đơn thả xuống (Toàn bộ cột hoặc nhiều ô)

Trong các ví dụ trên, Limoseo đã chỉ cho bạn cách để tải xuống nhiều lựa chọn trong một ô. Tuy nhiên, nếu bạn muốn áp dụng điều này cho toàn bộ cột hoặc nhiều ô, có thể thực hiện điều này bằng một số sửa đổi nhỏ trong mã. Để cho phép menu thả xuống cho phép chọn nhiều mục trong toàn bộ cột C, bạn cần thay thế dòng mã sau:

if (activeCell.getColumn () == 3 && activeCell.getRow () == 1 && ss.getActiveSheet (). getName () == “Sheet1”)

if (activeCell.getColumn () == 3 && ss.getActiveSheet (). getName () == “Sheet1”)

Khi làm như vậy, chúng ta chỉ kiểm tra xem cột có phải là C hoặc F hay không. Bất kỳ ô nào trong Sheet1 và cột C hoặc F đều đáp ứng tiêu chí IF này và bất kỳ ô nào có menu thả xuống trong cột này sẽ cho phép nhiều lựa chọn.

if (activeCell.getColumn () == 3 || 6 && ss.getActiveSheet (). getName () == “Sheet1”)

Trong đoạn mã trên, chúng ta sử dụng điều kiện OR trong câu lệnh IF để kiểm tra xem cột có số thứ tự là 3 hoặc 6. Điều này sẽ cho phép nhiều lựa chọn trong trình đơn thả xuống được bật khi ô nằm trong cột C hoặc F.

Nếu bạn muốn áp dụng tính năng này cho nhiều ô, bạn có thể sửa đổi mã tương ứng.

Đó là cách sử dụng google apps script để tạo danh sách thả xuống đa lựa chọn trong google sheets. Tuy tính năng này không có sẵn trong Google Sheets, nhưng bạn có thể thực hiện điều này một cách dễ dàng với mã VBA đã được hướng dẫn ở trên. Chúc bạn thành công với những chia sẻ của Công Ty Quảng Cáo Marketing Online Limoseo ở trên nhé!

🍀🍀 Quý đọc giả nếu có quan tâm đến một số dịch vụ quảng cáo hỗ trợ cho việc phát triển kênh Tiktok của mình tại Limoseo vui lòng tham khảo tại đây:

👉 Dịch vụ tăng view Tiktok

👉 Dịch vụ tăng tim Tiktok

👉 Dịch vụ mua follow Tiktok

👉 Dịch vụ tăng mắt livestream Tiktok

(1 bình chọn) - 5/5