5

में उसी उपयोगकर्ता के साथ साझा करें मैंने अब कुछ दिनों के लिए इंटरनेट की दूर तक पहुंच की खोज की है, लेकिन मुझे मेरे मुद्दे का समाधान नहीं मिल रहा है। मेरे पास प्रोग्रामिंग का सीमित ज्ञान है, लेकिन अगर मैं इसे काम पर ला सकता हूं, तो यह अद्भुत चीजें करने जा रहा है।Google स्प्रेडशीट की प्रतिलिपि बनाएँ + स्क्रिप्ट

विवरण: मुझे स्प्रेडशीट ए के अंदर एक स्क्रिप्ट का उपयोग करके टेम्पलेट स्प्रेडशीट की एक प्रति बनाने की आवश्यकता है और प्रतिलिपि (विशेष रूप से नाम और संरक्षित श्रेणियों) में टेम्पलेट की सभी अनुमतियों की प्रतिलिपि बनाना है। मैं शीटस्पीडर का उपयोग कर रहा हूँ।

अभी तक, मैं टेम्पलेट का डुप्लिकेट बना सकता हूं, लेकिन शीटस्पीडर टेम्पलेट की अनुमतियों को छोड़ देता है, और सेटअप प्रक्रिया के दौरान परिभाषित उपयोगकर्ताओं के साथ उन्हें फिर से लिखता है। इसके बजाय, मैं सिर्फ टेम्पलेट फ़ाइल की अनुमतियों की प्रतिलिपि बनाना चाहूंगा। ऐसा लगता है कि स्प्रेडशीट की नियमित प्रतिलिपि अभी भी नाम और संरक्षित रेंज सेटिंग्स के लिए अनुमतियों को नहीं लाती है, जैसे कि अगर आप फ़ाइल पर जाएं> स्प्रैडशीट कॉपी करें और उस बॉक्स को चेक करें जो कहता है "और उसी उपयोगकर्ता के साथ साझा करें "जो संरक्षित रेंज सेटिंग्स को बनाए रखता है।

फिर से, मेरे पास प्रोग्रामिंग का बहुत सीमित ज्ञान है, लेकिन मुझे लगता है कि मैंने उन रेखाओं को pinpointed है जो अनुमतियों को छोड़ने और रीसेट करने लगते हैं। मैंने अकेले अनुमतियों को छोड़ने के लिए नीचे दिए गए दिनों के साथ खेलना आजमाया है, लेकिन इसका कोई फायदा नहीं हुआ है।

किसी भी मदद या मार्गदर्शन की सराहना की जाएगी!

धन्यवाद!

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

गलत लाइनें कहां हैं? इसके अलावा, क्या आप इस तथ्य का उपयोग कर सकते हैं कि यदि आप किसी फ़ाइल को साझा फ़ोल्डर में ले जाते हैं, तो यह स्वचालित रूप से अन्य उपयोगकर्ताओं के साथ साझा किया जाएगा? और, जबकि यह काफी समय पहले है, क्या यह कभी तय हो गया है? – JZL003

उत्तर

1

यहां एक स्क्रिप्ट है जो चलने पर अनुमतियों के साथ स्प्रेडशीट की प्रतिलिपि बनायेगी। हालांकि, यह दर्शकों को दर्शकों में बदल देगा। यह अधिक कोड से टिकाऊ है लेकिन बहुत आसान नहीं है क्योंकि टिप्पणीकर्ता प्राप्त करने के लिए file विधि नहीं है।

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]) 
    } 
} 
संबंधित मुद्दे