Lấy Email người dùng đang hoạt động trên Google Sheet – getActiveUser

Lấy Email người dùng đang hoạt động trên Google Sheet – getActiveUser

0

Nội dung

Trong bài này, HocGgSheet.com sẽ giới thiệu đến với các bạn cách Lấy Email người dùng (user) đang hoạt động trên Google Sheet bằng hàm getActiveUser() của Apps Script

Hàm getActiveUser()

Để lấy được email của người dùng đang hoạt động, chúng ta có 2 hàm là getActiveUser và getEffectiveUser. Tuy nhiên, hàm getEffectiveUser trả về kết quả khá phức tạp và khó nắm bắt, chúng ta nên sử dụng hàm getActiveUser. Các bạn có thể đọc thêm ở link sau:

https://developers.google.com/apps-script/reference/base/session#getActiveUser()

Chương trình dưới đây sẽ dùng getActiveUser() để lấy ra email rồi ghi vào ô A1

0123456

function email() { var ss = SpreadsheetApp.getActive(); var email = Session.getActiveUser().getEmail(); ss.getRange('A1').setValue(email);}

Kết hợp với trigger onEdit và onOpen

Trước hết các bạn hãy hiểu rằng, email là thông tin cá nhân. Mà những thứ liên quan đến thông tin cá nhân thì thường được Google bảo vệ rất cẩn thận. Vì vậy nên chúng ta KHÔNG THỂ kết hợp getActiveUser và các trigger

Mặc dù bạn hoàn toàn có thể viết thành chương trình sau:

0123456

function onEdit() { var ss = SpreadsheetApp.getActive(); var email = Session.getActiveUser().getEmail(); ss.getRange('A1').setValue(email);}

Và tất nhiên khi các bạn chạy thử thì vẫn sẽ ra kết quả như bình thường. Tuy nhiên, đó là do các bạn là “Chủ sở hữu” (owner) của file này. Nếu các bạn thử đăng nhập vào 1 tài khoản khác và vào file, thì trigger onEdit hay onOpen sẽ không hoạt động. Như vậy thì đâu còn ý nghĩa gì khi mà nó chỉ có thể lấy được email của mỗi mình bạn, đúng chứ?

Nguyên nhân là do việc lấy email cá nhân đã đi vào Giới hạn của trigger. Giống như hàm alert() để xuất hiện hộp thoại dialog / popup vậy. Các bạn có thể đọc thêm ở link sau:

https://developers.google.com/apps-script/guides/triggers/#restrictions

Giải pháp

Tuy rằng không có giải pháp triệt để cho sự kết hợp trên. Nhưng chúng ta hoàn toàn có thể trả lời cho câu hỏi: “Làm thế nào để lấy được email của user đang hoạt động?”. Sau đây là 1 vài gợi ý cho các bạn:

1. User đó phải truy cập vào Apps Script

Ở trên mình nói rằng ngoài getActiveUser thì còn có 1 hàm khác để lấy email người dùng, đó là getEffectiveUser. Trong bài này, mình sẽ không đề cập đến việc sử dụng getEffectiveUser thế nào. Nhưng mình muốn đưa ra 1 vài gợi ý, đó là các bạn có thể dùng getEffectiveUser với trigger onEdit và onOpen. Ví dụ chương trình sau:

0123456

function onEdit() { var ss = SpreadsheetApp.getActive(); var email = Session.getEffectiveUser().getEmail(); ss.getRange('A2').setValue(email);}

Để làm được điều này thì user (không phải chủ sở hữu) phải vào được file Apps Script. Sau đó chọn Chỉnh sửa -> Các kích hoạt dự án hiện tại

Khi G Suite Developer Hub bật lên, các bạn chọn tiếp Thêm trình kích hoạt

Rồi chỉnh sửa giống theo hình sau

Bây giờ thì các bạn có thể quay lại file Google Sheet và xem kết quả. Tuy nhiên mình xin nhắc trước, việc sử dụng getEffectiveUser có thể đem đến các kết quả không như ý muốn. Các bạn nên tìm hiểu kĩ hàm này trước khi đem vào sử dụng thực tế. Ở đây mình chỉ đưa ra gợi ý thôi chứ không phải là 1 cách sử dụng chính thức (nên đừng trách mình nếu hàm không hoạt động như bạn muốn nhé ^^)

2. Khi user không vào Apps Script

Trường hợp này thì có phần đơn giản hơn nhiều. Nếu user không vào Apps Script và bạn vẫn muốn lấy được email của người ta (nhắc lại là việc kết hợp với trigger là không thể nhé), thì có thể làm như sau:

Các bạn hãy tạo 1 nút kích hoạt để chạy hàm. Nút này có thể ở ngay trên bảng tính, hoặc ở dưới dạng macro. Cho chương trình như lúc đầu:

0123456

function email() { var ss = SpreadsheetApp.getActive(); var email = Session.getActiveUser().getEmail(); ss.getRange('A1').setValue(email);}

Macro

Để tạo macro, các bạn vào Công cụ -> Macro -> Nhập

Sau đó chọn Thêm hàm cho function tên là email

Sau này các bạn cứ vào Công cụ -> Macro -> email thì nó sẽ thực thi hàm email và lấy email của người dùng đang hoạt động

Tạo Nút lấy email người dùng

Ngoài ra thì các bạn có thể tạo “Nút” bằng cách:

Vào Chèn -> Bản vẽ

Sau đó thì vẽ 1 khung bất kì, ở đây mình chọn Hộp văn bản và vẽ ra 1 khung có chữ. Rồi điền vào chữ “email”

Tiếp theo, các bạn bấm vào dấu 3 chấm ở bên phải khung vừa vẽ, chọn Gán tập lệnh…

Cuối cùng là điền tên hàm mà bạn dùng getActiveUser vào. Ở trên thì hàm của mình tên là “email” nên mình gõ chữ “email” vào

Từ giờ thì mỗi lần có người click vào chữ Email trên bảng tính thì sẽ hiện ra email của người đó ở ô A1

Last updated

Navigation

Lionel

@Copyright 2023