【发布时间】:2021-08-23 14:20:46
【问题描述】:
我有一个函数getFnF(),它遍历 Google Drive 文件夹及其所有子文件夹。当getFnF() 遇到 Google 表格文件时,我让脚本解析该 Google 表格文件并使用我的函数getLinksFromSheet() 提取它找到的任何 URL 链接。这两个函数都可以工作,但是在遍历 Drive 文件夹并在遇到的 Google 表格文件上调用 getLinksFromSheet() 大约 10 分钟后,我收到了 The JavaScript runtime exited unexpectedly. 错误。有没有人知道什么会导致这个错误? Google Drive 文件夹非常大(子文件夹中总共有约 500 个文件,其中约 75 个是 Google 表格)。代码如下:
function getFnF(folder) {
var folder= folder || DriveApp.getFolderById("0AFZNRhJpE8LKUk9PVA"); //hard goded DEP-Gotham folder
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var files=folder.getFiles();
while(files.hasNext()) {
var file=files.next();
var firg=sh.getRange(sh.getLastRow() + 1,level + 1);
firg.setValue(Utilities.formatString('File: %s', file.getName()));
Logger.log(file.getName())
//if (file.getMimeType() == 'application/vnd.google-apps.document') {getAllLinks(file.getId(), false);};
//if (file.getMimeType() == 'application/vnd.google-apps.presentation') {getLinksFromSlides(file.getId());};
if (file.getMimeType() == 'application/vnd.google-apps.spreadsheet') {getLinksFromSheet(file.getId());};
}
var subfolders=folder.getFolders()
while(subfolders.hasNext()) {
var subfolder=subfolders.next();
var forg=sh.getRange(sh.getLastRow() + 1,level + 1);
forg.setValue(Utilities.formatString('Fldr: %s', subfolder.getName()));
level++;
getFnF(subfolder);
}
level--;
}
function getLinksFromSheet(sheetId){
var ss = SpreadsheetApp.openById(sheetId);
var sheets = ss.getSheets();
var parentDocName = ss.getName();
var destSs=SpreadsheetApp.getActive();
var destSh=destSs.getSheetByName('Extracted Links');
sheets.forEach(sheet => {
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(1,1, lastRow, lastColumn);
//var rangeValues = searchRange.getValues();
var rangeValues = searchRange.getRichTextValues();
for (var i = 0; i < lastRow; i++){
for (var j = 0; j < lastColumn; j++){
const runs = rangeValues[i][j].getRuns();
for (const v of runs) {
var nextLink = v.getLinkUrl();
if (nextLink != null) {
var row = destSh.getLastRow() + 1;
var r1=destSh.getRange(row, 1);
r1.setValue(parentDocName);
var r2=destSh.getRange(row, 2);
r2.setValue(nextLink);
};
}
}
}
});
【问题讨论】:
-
@MattKing 我再次运行脚本,这次我在 4 分钟后得到了错误。可能有不同的原因吗?另外,有什么办法可以更新脚本以使其运行得更快?
-
@GabrielTero,你能在下面尝试我的修改吗?它应该能够为您节省一些时间并使您的脚本更快。
标签: javascript google-apps-script google-sheets google-drive-api