Cách phân quyền hàng loạt record trong google sheet

Chào anh/chị, em làm bên quản lý nhân sự, Em có một file google sheet là danh sách ca làm việc của nhân viên, mỗi người tự chọn ngày làm bằng cách đánh dấu vào ô có sẵn trong bảng. nhưng em muốn mỗi người chỉ có quyền chỉnh sửa ô của chính mình. trong google sheet có tính năng “bảo vệ dải ô” nhưng với danh sách hàng trăm nhân viên phải edit, nhập mail từng người dễ xảy ra sai sót, Không biết có cách nào auto phân quyền theo danh sách mail có sẵn không ạ ? hoặc có scipt, macro, tool, extension nào hỗ trợ không ? Anh/chị có thể cho em keyword để search google cũng được ạ ! Em cảm ơn nhiều.

hello. Có ai không ?!

Chắc là dùng đến google sheets api. Mình chỉ biết thế sâu hơn chắc nhờ các bạn khác thôi. :smiling_imp:

3 Likes

Nếu bạn chưa giải quyết, có một hướng bạn có thể thử:

Mình thấy Google App Script có cung cấp những hàm support việc phân quyền chỉnh sửa cho protected range ở đây: https://developers.google.com/apps-script/reference/spreadsheet/protection

Bạn có thể xem nhanh cách tạo 1 script: https://developers.google.com/apps-script/overview rồi nhảy sang phần protection

6 Likes

Mình cảm ơn bạn @SITUVN.gcd@giinny10 đã giúp đỡ. Cách 1 mình viết bằng java lấy được token , ID rồi, xuất ra được file JSON nhưng mình chỉ read, write được value của ô, còn các hàm permission thì không chạy. Cách 2 mình thấy đơn giản hơn phù hợp với nhu cầu của mình, không cần tải IDE nên mình up code lên, sau này có ai có câu hỏi giống mình thì lấy dùng nhé ( mình không chuyên IT nên code không được đẹp nhưng mình test kỹ rồi mới dám share )

function AutoPermission() {
 
  var mainTable = 'Sheet1'; 
  var gmailList = 'Sheet2'; 
  var sheet;
  var range;
  var mail;
  var protection;
  var total = SpreadsheetApp.getActive().getSheetByName(gmailList).getLastRow();


  for ( var i = 1; i<=total;i++ ){
    sheet = SpreadsheetApp.getActive().getSheetByName(mainTable); 
    range = sheet.getRange(i.toString()+':'+i.toString());
    
    mail = SpreadsheetApp.getActive().getSheetByName(gmailList).getRange('A'+i.toString()).getValue();
    protection = range.protect().addEditor(mail).setDescription(mail);
    
  }  
}

các bạn copy vào mục tool > marco trong sheet cho run là xong, chỉ số dòng của 2 sheet phải trùng nhau, nên bắt đầu từ 1 ( có thể edit lại vòng for )

4 Likes

Bạn ơi mình không hiểu cách thiết lập nội dung trong file sheet thế nào để có thể sử dụng được code của bạn nhỉ? email sẽ đặt ở đâu ?
vì mình tạo 1 cột email mà không sử dụng code của bạn được. bạn giải thích kỹ hơn được ko hoặc tạo ví dụ là file sheet cũng được. nhờ bạn hỗ trợ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?