我写了一个小脚本,将我的google驱动器中的所有.xls
和.xlsx
文件转换为Google工作表。但是,脚本的结果非常不可靠,有时我会在代码的某些随机部分出现错误,并说:"我们很抱歉,发生了服务器错误。请稍等一下再试一次。"。有时候我会收到一条错误说“#34; Access denied Drive App"在我尝试删除已转换的.xls
或.xlsx
文件的行上。我已为Drive API启用了高级Google服务。
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");
}
答案 0 :(得分:1)
我怀疑你正在达到速率限制。如果您快速连续执行超过20次写入操作(创建,更新,删除),则需要将请求限制为大约每1.5秒一次。
您可能正在考虑" wtf",但这严重意味着您可以通过云端硬盘实现最大吞吐量。
答案 1 :(得分:1)
我有类似的问题!在运行以主要用户身份登录的脚本时,似乎没有最大的吞吐量限制,请与其他用户共享文档,并让他们运行在其他用户的驱动器中执行写操作的脚本。 'Utilities.sleep(1500);'帮了我大忙。
delFolder = DriveApp.getFolderById("folder_id")
delFiles = delFolder.getFiles();
while (delFiles.hasNext()) {
var delFile = delFiles.next();
Utilities.sleep(1500);
delFile.setTrashed(true);