dengan IMPORTRANGE SpreadSheet A, B, C, dll. Meminta akses untuk mengekstrak data daripada SpreadSheet 1 (Rajah 1). Contoh:
=IMPORTRANGE("SpreadSheet 1"; "Sheet!A1")
Saya mahu mengalih keluar akses (membatalkan kebenaran) daripada Spreadsheet A untuk mengekstrak data daripada Spreadsheet 1 (Gambar 2) Membatalkan akses yang dibenarkan kepada Gambar 1 untuk membatalkan kebenaran yang diberikan kepada Spreadsheet AElectronic dari Jadual Percetakan ekstrak data
Ini hanyalah contoh ringkas kerana sebenarnya saya mempunyai lebih 200 hamparan yang disambungkan kepada 1 (sebenarnya 2) hamparan pangkalan data, sebab itu saya ingin membatalkan kebenaran, berapa banyak hamparan boleh mengakses satu hamparan Saya telah mencapai had ini berkali-kali dengan borang saya
Gambar hamparan sebenar untuk membantu memahami bahagian kod saya, skrip akan dijalankan pada hamparan yang sama meminta akses
Saya mungkin silap tetapi saya mempunyai skrip lama yang saya fikir berkesan pada satu masa
function removePermission() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const ss_c = ss.getSheetByName('Config'); var currentSheetId = ss.getId(); var targetId = ""; if (ss_c.getRange("B6").getValue() == 1) { targetId = ss_c.getRange("D6").getValue(); } else if (ss_c.getRange("B6").getValue() == 2) { targetId = ss_c.getRange("D7").getValue(); } var currentFile = DriveApp.getFileById(currentSheetId); var targetFile = DriveApp.getFileById(targetId); var targetPermissions = targetFile.getPermissions(); for (var i = 0; i < targetPermissions.length; i++) { var permission = targetPermissions[i]; if (permission.getType() == "user" && permission.hasAccess()) { currentFile.removeEditor(permission.getEmail()); // or the next one // targetFile.removeEditor(permission.getEmail()); } } }
Tetapi kini ia menunjukkan ralatTypeError: targetFile.getPermissions is not a function
Jadi saya cuba mengubah suainya dengan apa yang saya cari
function test() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const ss_c = ss.getSheetByName('Config'); var currentSheetId = ss.getId(); var targetId = ""; if (ss_c.getRange("B6").getValue() == 1) { targetId = ss_c.getRange("D6").getValue(); } else if (ss_c.getRange("B6").getValue() == 2) { targetId = ss_c.getRange("D7").getValue(); } var currentFile = DriveApp.getFileById(currentSheetId); var targetFile = DriveApp.getFileById(targetId); var targetEditors = targetFile.getEditors(); var currentEditors = currentFile.getEditors(); var activeUserEmail = Session.getActiveUser().getEmail(); for (var i = 0; i < targetEditors.length; i++) { var editor = targetEditors[i]; var editorEmail = editor.getEmail(); // Check if the editor exists in the current file before removing if (editorEmail !== activeUserEmail && currentEditors.some(e => e.getEmail() === editorEmail)) { targetFile.removeEditor(editorEmail); } } }
Lulus tetapi tidak bekerja
Saya tidak biasa dengan tepat cara editor berfungsi dalam kes ini, dan mencari saya tidak dapat mencari soalan dan penyelesaian yang berkaitan
Saya pemilik dan hanya pengguna, tidak pasti tetapi ia berkaitan dengan fail bukan pengguna, hargai bantuan, terima kasih
Saya percaya matlamat anda adalah seperti berikut.
IMPORTRANGE
yang dibenarkan.IMPORTRANGE
dalam hamparan anda.Masalah dan Penyelesaian:
Lihat kaedah untuk membatalkan terus
IMPORTRANGE
keizinan Hamparan. Malangnya, saya tidak dapat mencari kaedahnya. Walau bagaimanapun, kita sudah tahu bahawa apabila menggunakan titik akhir, proses kebenaran boleh dijalankan oleh skrip. Rujuk Saya rasa ini mungkin berfungsi sebagai penyelesaian dalam kes anda. Aliran untuk penyelesaian ini adalah seperti berikut.IMPORTRANGE
, kecuali hamparan yang ingin anda batalkan.Ikuti proses ini untuk mendapatkan Hamparan Google dengan membatalkan hamparan khusus yang anda inginkan.
Walau bagaimanapun, dalam penyelesaian ini, ID hamparan berbeza daripada ID asal kerana hamparan asal telah disalin. Jadi, saya tidak pasti sama ada ini berguna dalam situasi sebenar anda. Jadi, saya hanya mencadangkan penyelesaian ini.
Apabila proses di atas ditunjukkan dalam skrip sampel, ia menjadi seperti berikut.
Contoh skrip:
Sila salin dan tampal skrip berikut ke dalam editor skrip hamparan asal dan tetapkan
spreadsheetIdsOfdeletePermission
dan simpan skrip.Nota:
Utilities.sleep 的循环中使用
denganUrlFetchApp.fetch
而不是UrlFetchApp.fetchAll