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