5

Tôi đã tìm kiếm các địa điểm Internet xa trong vài ngày nay, nhưng dường như không tìm được giải pháp cho vấn đề của tôi. Tôi có kiến ​​thức hạn chế về lập trình, nhưng nếu tôi có thể làm việc này, nó sẽ làm những điều tuyệt vời.Sao chép Bảng tính Google + Chia sẻ với cùng một người dùng trong tập lệnh

GIẢI THÍCH: Tôi cần tạo bản sao của bảng tính mẫu, sử dụng tập lệnh bên trong bảng tính A và sao chép tất cả quyền của mẫu vào bản sao (cụ thể là tên và dải ô được bảo vệ). Tôi đang sử dụng SheetSpider.

Hiện tại, tôi có thể tạo bản sao của mẫu, nhưng SheetSpider dường như thả các quyền mà mẫu có và ghi lại chúng với người dùng mà bạn xác định trong quá trình thiết lập. Thay vào đó, tôi chỉ muốn sao chép các quyền của tệp khuôn mẫu. Điều này có vẻ phức tạp vì bản sao bảng tính thông thường vẫn không mang lại quyền cho tên và cài đặt dải ô được bảo vệ giống như khi bạn chuyển đến tệp> sao chép bảng tính và chọn hộp có nội dung "và chia sẻ với cùng người dùng "DOES giữ lại cài đặt dải ô được bảo vệ.

Một lần nữa, tôi có kiến ​​thức rất hạn chế về lập trình, nhưng tôi nghĩ rằng tôi đã xác định chính xác các dòng dường như thả và đặt lại quyền. Tôi đã cố gắng chơi với các bên dưới cho ngày nay để có được nó để lại các điều khoản một mình, nhưng vô ích.

Bất kỳ trợ giúp hoặc hướng dẫn nào sẽ được đánh giá rất nhiều!

Cảm ơn!

function checkFixFileACLs(file, approvedViewers, approvedEditors) { 
    var viewers = file.getViewers().join(","); 
    viewers = viewers.split(","); 
    var editors = file.getEditors().join(","); 
    editors = editors.split(","); 
    viewers = arr_diff(editors, viewers); 
    var owner = file.getOwner().toString(); 
    var fileKey = file.getId(); 
    var driveFile = DriveApp.getFileById(fileKey); 
    var currViewers = []; 
    for (var k=0; k<viewers.length; k++) { 
    if ((viewers[k]!='')&&(approvedViewers.indexOf(viewers[k].toLowerCase())==-1)&&(approvedEditors.indexOf(viewers[k].toLowerCase())==-1)&&(viewers[k]!=owner)) { 
     try { 
     call(function() {driveFile.removeViewer(viewers[k].toLowerCase());}); 
     } catch(err) { 
     Logger.log(err.message); 
     } 
    } else { 
     currViewers.push(viewers[k].toLowerCase()); 
    } 
    } 
    for (var k=0; k<approvedViewers.length; k++) { 
    if ((approvedViewers[k]!='')&&(approvedViewers[k])) { 
     if (currViewers.indexOf(approvedViewers[k])==-1) { 
     try { 
      call(function() {driveFile.addViewer(approvedViewers[k].toLowerCase());}); 
     } catch(err) { 
      Logger.log(err.message); 
     } 
     } 
    } 
    } 
    var currEditors = []; 
    for (var k=0; k<editors.length; k++) { 
    if ((editors[k]!='')&&(approvedEditors.indexOf(editors[k].toLowerCase())==-1)&&(editors[k]!=owner)) { 
     try { 
     call(function() {driveFile.removeEditor(editors[k].toLowerCase());}); 
     } catch(err) { 
     Logger.log(err.message); 
     } 
    } else { 
     currEditors.push(editors[k].toLowerCase().replace(/\s+/g, '')); 
    } 
    } 
    for (var k=0; k<approvedEditors.length; k++) { 
    if ((approvedEditors[k]!='')&&(approvedEditors[k])) { 
     if (currEditors.indexOf(approvedEditors[k].toLowerCase())==-1) { 
     try { 
      call(function() {driveFile.addEditor(approvedEditors[k].toLowerCase().replace(/\s+/g, ''));}); 
     } catch(err) { 
      Logger.log(err.message); 
     } 
     } 
    } 
    } 
    return; 
} 
+0

Đường dây sai ở đâu? Ngoài ra, bạn có thể sử dụng thực tế là nếu bạn di chuyển một tệp vào thư mục được chia sẻ, nó sẽ tự động được chia sẻ với những người dùng khác? Và, trong khi điều này là khá lâu trước đây, nó đã từng được sửa chưa? – JZL003

Trả lời

1

Đây là tập lệnh sẽ sao chép bảng tính khi có quyền khi chạy. Tuy nhiên, nó sẽ biến người bình luận thành người xem. Điều này có thể tránh được với nhiều mã hơn nhưng không phải là rất dễ dàng vì không có phương thức file để nhận được các nhà bình luận.

function myFunction() { 

    var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).makeCopy(); 
    var editors = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getEditors(); 
    for (var i = 0; i<editors.length;i++) { 
    file.addEditor(editors[i]) 
    } 
    var viewers = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getViewers(); 
    for (var i = 0; i<viewers.length;i++) { 
    file.addViewer(viewers[i]) 
    } 
} 
Các vấn đề liên quan