【问题标题】:Error: Cannot Retrieve the next object: iterator has reached the end. createFolder @ Function: createFolder.gs:8错误:无法检索下一个对象:迭代器已到达末尾。 createFolder@函数:createFolder.gs:8
【发布时间】:2020-11-27 16:18:01
【问题描述】:

我使用我在 SO 上看到的代码将文档保存到 Google Drive 中的特定文件夹中,但按日期 (YYYY-MM-DD)。我已经运行了这个脚本,但我不断收到上述消息。我试图查看代码,但看不到我哪里出错了 - 有人可以帮我吗?非常感谢!

function createFolder(){
  var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd");
  var folderYearDate = Utilities.formatDate(new Date(), "GMT", "yyyy");
  var folderMonthDate = Utilities.formatDate(new Date(), "GMT", "MMMM");
  var name = "XXXX" + formattedDate; //file name
  var parent = DriveApp.getFolderById("XXXX").getFoldersByName("XXXX")
  var yearExist = parent.next();
  var yearFolders = yearExist.getFoldersByName(folderYearDate);
  if(yearFolders.hasNext()){
    var yearFolder = yearFolders.next()
    Logger.log('Yes, there is a year folder')
    //return;
  } else {
    var yearFolder = yearExist.createFolder(folderYearDate)

    Logger.log('There was no year folder, but it was created.')
    //return;
  }

  var monthFolders = yearFolder.getFoldersByName(folderMonthDate);
  if(monthFolders.hasNext()){
    var monthFolder = monthFolders.next()
    Logger.log('Yes, there is a month folder.')

  } else {
    var monthFolder = yearFolder.createFolder(folderMonthDate);
    Logger.log('There was no month folder, but it was created')
  }
}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    失败是因为DriveApp.getFolderById("XXXX").getFoldersByName("XXXX") 调用没有找到任何文件夹。您应该始终在 .next() 之前调用 .hasNext() 以查看是否有任何内容(就像您稍后在代码中所做的那样)。

    var parent = DriveApp.getFolderById("XXXX").getFoldersByName("XXXX")
    
    // Check if the folder exists
    if (!parent.hasNext()) {
      Logger.log("Folder not found. Exiting...");
      return;
    }
    
    var yearExist = parent.next();
    

    【讨论】:

    • 谢谢你们。我现在已经编辑了代码。我收到一个单独的错误,我打算发布另一个问题,因为它与这个问题无关。
    【解决方案2】:

    根据定义,

    next() - 获取文件或文件夹集合中的下一项。如果没有剩余项目,则引发异常。

    为避免该异常,您必须使用hasNext() 确定调用next() 是否会返回一个项目。

    在您的代码中:

    if(parent.hasNext()){
      var yearExist = parent.next();
      //some operations
    }
    

    参考文献

    next()

    hasNext()

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2021-10-24
      • 2021-08-29
      • 2017-03-29
      • 2020-01-19
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多