You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps脚本批量检查Drive文件夹是否为空效率优化求助

提升Google Apps Script检查Drive文件夹是否为空的效率

我有一个包含Google Drive文件夹链接的电子表格,需要检查这些文件夹是否为空。已知链接从C3单元格开始,为了适配后续数据扩展,我原本遍历至最后一行,但行数越多脚本运行速度越慢。

以下是我当前的脚本:

function checkFileExists(){
  var range = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange();
  var values = range.getRichTextValues();
  for (var row = 2; row<values.length; row++) {
    if (!values[row].join("")) break;
    for(var col = 2; col<values[row].length; col++) {
      if (!values[row][col].getLinkUrl()) continue;
      if(!(DriveApp.getFolderById(values[row][col].getLinkUrl().replace(/^.+\//, '')).getFiles()).hasNext()){
        range.getCell(row+1,col+1).setBackground("#e06666");
      }
      else{
        range.getCell(row+1,col+1).setBackground("#93c47d");
      }
    }
  }
}

请问有没有办法提升脚本效率、缩短运行时间?


补充:感谢Tanaike的解答,我现在使用以下代码,运行效果很好。该代码从C3开始,遍历至表格中C列及以后的最后一条数据:

function checkFileExists2() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var startRow = 3; // Start row for the range
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var range = sheet.getRange(startRow, 3, lastRow - startRow + 1, lastColumn - 2);
  var values = range.getRichTextValues();
  var { rows, requests } = values.reduce((o, row, i) => {
    row.forEach((cell, j) => {
      var link = cell.getLinkUrl();
      if (link) {
        var folderId = link.split("/").pop();
        var q = `'${folderId}' in parents and trashed=false`;
        var fields = "files(id)";
        o.rows.push(sheet.getRange(i + startRow, j + 3).getA1Notation());
        o.requests.push({
          method: "GET",
          endpoint: `https://www.googleapis.com/drive/v3/files?corpora=allDrives&includeItemsFromAllDrives=true&supportsAllDrives=true&pageSize=1&q=${encodeURIComponent(q)}&fields=${encodeURIComponent(fields)}`,
        });
      }
    });
    return o;
  }, { rows: [], requests: [] });
  var results = BatchRequest.EDo({ batchPath: "batch/drive/v3", requests });
  var res = results.reduce((o, { files }, i) => {
    o[files.length > 0 ? "#93c47d" : "#e06666"].push(rows[i]);
    return o;
  }, { "#e06666": [], "#93c47d": [] });
  Object.entries(res).forEach(([k, v]) => {
    if (v.length > 0) {
      sheet.getRangeList(v).setBackground(k);
    }
  });
}

内容的提问来源于stack exchange,提问作者Roy503

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:15:23