2017-07-06 8 views
0

Googleドライブのファイル.xls.xlsxをすべてGoogleシートに変換するスクリプトを作成しました。ただし、スクリプトの結果は非常に信頼性が低く、コードのランダムな部分でエラーが発生することがあります。「申し訳ありませんが、サーバーエラーが発生しました。少し待ってからもう一度お試しください。また、変換された.xlsまたは.xlsxファイルを削除しようとしている行で、「アクセスが拒否されたドライブアプリケーション」というエラーが表示されることがあります。私は、Drive APIのAdvance Google Servicesを有効にしました。ファイルを削除しようとしたときにドライブのアクセスが拒否されました

function convertFolder(folder){ 
    Logger.log('Folder name '+folder.getName()); 
    var files = folder.searchFiles('(title contains ".xlsx" or title contains ".xls") and (not title contains ".~lock")'); 
    while(files.hasNext()){ 
    var xFile = files.next(); 
    var name = xFile.getName().replace(/\.[^/.]+$/, ""); 
    Logger.log('File name '+name); 
    if (name.indexOf(".~lock")!=-1) 
     continue; //for some reason the "and (not title contains ".~lock")" didn't do the trick - why!?! 
    var parents = xFile.getParents(); 
    var parents_arr = new Array(); 
    while (parents.hasNext()){ 
     parents_arr.push({'kind':"drive#fileLink",'id':parents.next().getId()}); 
    } 

    var ID = xFile.getId(); 
    var xBlob = xFile.getBlob(); 
    var newFile = { title : name+'.gsheet',key : ID, parents: parents_arr, mimeType: "application/vnd.google-apps.spreadsheet"}; 
    file = Drive.Files.insert(newFile, xBlob, {convert: true}); 
    xFile.setTrashed(true); 
    } 
    var folders = folder.getFolders(); 
    while (folders.hasNext()) 
    convertFolder(folders.next()); 
} 

function convertAllExcel(){ 
    var folders = DriveApp.getFoldersByName('Data'); 
    while (folders.hasNext()){ 
    var folder = folders.next(); 
    convertFolder(folder); 
    } 
    SpreadsheetApp.getUi().alert("done"); 
} 

答えて

1

私はあなたがレート制限を打つと思われます。連続して20回以上の書き込み操作(作成、更新、削除)を行っている場合は、要求を1.5秒ごとに約1つに絞り込む必要があります。

あなたはおそらく「重量」と考えていますが、これはドライブで達成できる最大のスループットです。

+1

ファイルを削除するときに「アクセス拒否」については、別のユーザーが所有するファイルをゴミ箱に入れようとしていたためです。残念ながら、所有者だけがファイルをゴミ箱に入れることがあります。他のエラーが消えるかどうか確認するためにコードを絞ります。 –

関連する問題