【发布时间】:2017-07-06 21:27:04
【问题描述】:
我写了一个小脚本来将我谷歌驱动器中的所有.xls 和.xlsx 文件转换为谷歌表格。但是,脚本的结果非常不可靠,有时我会在代码的某个随机部分出现错误,说:“我们很抱歉,发生了服务器错误。请稍等,然后重试。”。在其他时候,我在尝试删除已转换的.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");
}
【问题讨论】:
标签: google-apps-script google-drive-api