2017-08-28 33 views
0

我的腳本從工作表'Studenti'需要35個學生姓名。然後找到與他們的名字(即'史密斯彼得')正確的文件夾,刪除舊的成績保存他們的名字(即'史密斯彼得.pdf')的pdf文件,並保存到文件夾('史密斯彼得')一個新的pdf具有新成績的文件('Smith Peter.pdf')。然後從名單中接受另一名學生。學生成績簿。無法完成腳本,因爲「訪問被拒絕:DriveApp」

問題:1,2或3次迭代後腳本停止說:訪問被拒絕:DriveApp。 (第22行,文件「代碼」:files.next()。setTrashed(true);)。一週前,該腳本沒有任何問題,我嘗試在這裏更改名稱,文件夾,目的地,源表和檢查建議。但沒有成功。我不知道22號線有什麼問題,請幫忙!

的代碼是封閉

Execution transcript(顯示在腳本已停止)

function generatePdf() { 
 

 
var report = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Gradebook ready to save as pdf 
 
var zasobnik = SpreadsheetApp.openById('1eygLDH0iJoXfcVOMIin0hnKpMF59HszmXZosPKvwYWc'); 
 
var zasobsheet = zasobnik.getSheetByName("Studenti"); // list of 35 students with names, Folder IDs 
 
var data = zasobsheet.getDataRange().getValues(); 
 
    
 
for (var i = 1; i < data.length; i++){ 
 
    report.getRange('B2').setValue(data[i][0]); // setting student's name in a gradebook (first column) 
 
    report.getRange('B3').setValue(' '); // just to jump from B2 to B3 
 
    
 
var pdf = DriveApp.getFileById('1WHwm7xK28Orj22RxaKWEsCl3UWvWxYUhRg4ZGf87-GQ'); // ID of Gradebook (IF of ActiveSpreadsheet) 
 
var theBlob = pdf.getBlob().getAs('application/pdf').setName(data[i][0] + ".pdf"); 
 
var folder = DriveApp.getFolderById(data[i][2]); // third column 
 
    
 
var files = DriveApp.getFilesByName(data[i][0] + ".pdf"); // pdf with old grades 
 
     while (files.hasNext()) {  
 
     files.next().setTrashed(true);  
 
    } 
 
var newFile = folder.createFile(theBlob); // creating pdf with new grades in the student's folder 
 
    
 
} 
 
}

回答

0

SO post,在用戶試圖刪除轉換後的文件,並得到了和你一樣的錯誤。

我懷疑你正在達到費率限制。如果連續快速寫入操作(創建,更新,刪除)超過20個,則您需要將請求限制爲大約每1.5秒一次。

懷疑的原因是用戶命中率限制。由於您也在更新數據,因此也有可能這就是爲什麼它正在處理前幾個執行並在達到極限之後。

這是您在Drive中可以實現的唯一分配的最大吞吐量。

0

經過幾次實驗,我找到了問題的根源,但沒有找到解決方案。 「拒絕訪問」的問題涉及到以下事實:我並非由我的腳本創建的文件的所有者,只有文件的所有者可能會垃圾或刪除該文件。儘管我是該腳本的作者,並且對放置在我的驅動器上的文件擁有編輯權限,但它不起作用。另一方面,我可以毫無問題地手動刪除/垃圾文件(這對我來說是誤導性的)。

教訓:如果你允許別人使用你的腳本,創建一個新的文件,也象垃圾一樣清除舊的比你可能無法完成你不允許你的腳本下一次SICE(拒絕訪問)的垃圾桶中由其他用戶創建的文件(儘管該文件是在您自己的驅動器上創建的!)。

調整問題:是否有人知道如何寫腳本破壞/刪除,其中我不是所有者的文件(但我有編輯權限),並且被其他用戶我的驅動器上創建?