Performance 如何使这个谷歌脚本更有效

Performance 如何使这个谷歌脚本更有效,performance,google-apps-script,google-sheets,processing-efficiency,Performance,Google Apps Script,Google Sheets,Processing Efficiency,我把这个脚本放到一个文件夹中,然后得到每个文件的密钥 function listFilesInFolder(id) { var folder = DriveApp.getFolderById(''); var contents = folder.getFiles(); var file; var name; var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(&quo

我把这个脚本放到一个文件夹中,然后得到每个文件的密钥

function listFilesInFolder(id) {

  var folder = DriveApp.getFolderById('');
  var contents = folder.getFiles();
  var file;
  var name;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Imported");
  var date;
  var size;

  sheet.clear();
  sheet.appendRow(["Name", "Data", "Size", "Id"]);


  while(contents.hasNext()) {
    file = contents.next();
    name = file.getName();
    date = file.getDateCreated()
    size = file.getSize()
    id = file.getId()

    data = [name, date, size, id]
    sheet.appendRow(data);
    
    //appendRow
  }
}; 
我的问题是要花太多的时间来完成整个文件夹,它通常会在完成之前达到运行时间限制

该文件夹包含1000多个不同的文件,我们每天自动上传文件


有没有办法让这个脚本更高效?

我相信你的目标如下

  • 您希望使用Google Apps脚本检索特定文件夹下的文件列表
  • 您希望降低问题中当前脚本的处理成本
修改点:
  • 在脚本中,
    appendRow
    在循环中使用。在这种情况下,工艺成本将很高
  • 而且,我认为在您的情况下,当使用驱动器API时,流程成本可能会稍微降低
当上述各点反映到脚本中时,它将变成如下所示

修改脚本: 在使用此脚本之前

注:
  • 从你的问题来看,我无法理解你处境的细节。因此,在这个修改后的脚本中,可以搜索Google驱动器和共享驱动器中的文件夹
参考资料:

脚本看起来并不低效。也许你需要批量处理你的工作,或者更频繁地调用你的脚本,而不是一天一次,以跟上上传的进度。也许这并不是你期望得到的解决方案。更像是一种方式。我会考虑安装谷歌驱动器并同步本地的所有文件。通过这种方式,您可以通过系统工具、Python脚本、node.js等在本地处理它们。尽管我不确定这是否是您的情况的直接解决方案,但我提出了一个修改后的脚本作为答案。你能确认一下吗?如果我误解了你的问题,而这不是你期望的方向,我道歉。这正是我试图实现的目标!它工作得很好!感谢您花时间详细解释最佳解决方案。@OPS Maheras欢迎您。谢谢你让我知道。我很高兴你的问题解决了。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我@马赫拉斯行动,谢谢你的回复。
function listFilesInFolder(id) {
  var folderId = "###"; // Please set the folder ID. If you want to use "id" for this, you can use var folderId = id;
  
  // 1. Retrieve file list using Drive API.
  var ar = [["Name", "Data", "Size", "Id"]];
  var pageToken = "";
  do {
    const res = Drive.Files.list({corpora: "allDrives", includeTeamDriveItems: true, supportsAllDrives: true, maxResults: 1000, pageToken: pageToken, q: `'${folderId}' in parents`});
    ar = ar.concat(res.items.map(({title, createdDate, fileSize, id}) => [title, createdDate, fileSize || 0, id]));
    pageToken = res.nextPageToken;
  } while(pageToken);

  // 2. Put the file list to Spreadsheet.
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Imported");
  sheet.clear();
  sheet.getRange(1, 1, ar.length, ar[0].length).setValues(ar);
}