一個可能的解決方法是運行在模式窗口普通的JavaScript代碼,沒有運行時間限制:
function onOpen()
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('Trash dot files')
.addItem('Run', 'openWindow')
.addToUi();
}
function openWindow()
{
var ui = SpreadsheetApp.getUi();
// get template
var template = HtmlService.createTemplateFromFile('deleteDriveFiles');
// need to have next line of text somewhere (even commented out) to trigger correct scopes for script and token:
// DriveApp.getFiles()
// pass token
template.data = {
token: ScriptApp.getOAuthToken()
};
// get output html
var html = template.evaluate();
// show modal window
ui.showModalDialog(html, 'Delete files from Drive');
}
[文件 - 新建 - HTML文件] deleteDriveFiles.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<script>
// used for visual log
function addParagraph(text)
{
var node = document.createElement('p');
node.innerText = text;
document.body.appendChild(node);
}
// for stats
var totalProcessed = 0;
var totalTrashed = 0;
function reqListener(){
// get response obj
var res = JSON.parse(this.responseText);
if (res.items && res.items.length)
{
// loop files
for (var i = 0; i < res.items.length; i++)
{
var file = res.items[i];
// delete file
if (file.title.indexOf('._') == 0)
{
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', function(){
// get response obj
var res = JSON.parse(this.responseText);
// sucessfully trashed
if (this.status == 200)
{
totalTrashed++;
addParagraph('Trashed '+res.title);
}
}.bind(xhr));
xhr.open('POST', 'https://www.googleapis.com/drive/v2/files/'+file.id+'/trash');
xhr.setRequestHeader('Authorization', 'Bearer <?=data.token?>');
xhr.send();
}
}
// for stats
totalProcessed += res.items.length;
}
// get next page of results
if (res.nextPageToken)
{
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', reqListener);
xhr.open('GET', 'https://www.googleapis.com/drive/v2/files?trashed=false&pageToken='+res.nextPageToken);
xhr.setRequestHeader('Authorization', 'Bearer <?=data.token?>');
xhr.send();
}
// finished
else
{
addParagraph('Finished. Processed total: '+totalProcessed+'. Trashed total: '+totalTrashed);
}
}
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', reqListener);
xhr.open('GET', 'https://www.googleapis.com/drive/v2/files?trashed=false');
xhr.setRequestHeader('Authorization', 'Bearer <?=data.token?>');
xhr.send();
</script>
</body>
</html>
節省代碼和清新的電子表格的網頁更改後,你會看到新的菜單項:
![enter image description here](https://i.stack.imgur.com/L3fFs.png)
點擊運行開始處理文件。
結果:
![enter image description here](https://i.stack.imgur.com/NC1fD.png)
來源
2017-06-30 19:43:55
Kos
搜索類似的問題。你不能延長時間,但可以通過使用觸發器的部分來處理它。 –