【问题标题】:Cannot retrieve the next object: iterator has reached the end无法检索下一个对象:迭代器已到达末尾
【发布时间】:2022-01-17 10:23:28
【问题描述】:

我正在尝试从共享 Google 磁盘中的电子表格创建 pdf,但我正在尝试找出阻止生成 pdf 的原因。 问题出在这一行:

var driveFolder = DriveApp.getFoldersByName(folderName).next(); 

这是整个代码:

function createPDF() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Article 19");
  var folderName=ss.getRangeByName("NumAff").getValue();
  var fileName='Tableau 19.09_' + ss.getRangeByName("NumAff").getValue();

  sheet.showSheet();
  var gid = sheet.getSheetId();
  const pdfOpts = '&top_margin=0.30&bottom_margin=0.30&left_margin=0.25&right_margin=0.25'
    +'&size=LETTER' // paper size letter / You can use A4 or legal
    +'&portrait=true' // orientation portal, use false for landscape
    +'&fitw=true' // fit to page width false, to get the actual size
    +'&sheetnames=false' // hide optional headers
    +'&printtitle=false' //and footers
    +'&pagenumbers=false' // hide page numbers 
    +'&gridlines=false' //and gridlines
    +'&horizontal_alignment=CENTER'
    +'&vertical_alignment=CENTER'
    +'&fzr=true' // do not repeat row headers (frozen rows) on each page
    +'&attachment=false'
    +'&gid='+gid;

  var url = ss.getUrl().replace(/edit$/, '') + 'export?format=pdf' + pdfOpts // export as pdf / csv / xls / xlsx
  var options = {headers: {'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()}}
  var blobresponse = UrlFetchApp.fetch(url, options);
  var blob=blobresponse.getBlob().setName(ss.getName() +".pdf" );
  var driveFolder = DriveApp.getFoldersByName(folderName).next(); 
  var file = driveFolder.createFile(blob);
  file.setName(fileName);
}

希望有人能解释一下问题的根源。

【问题讨论】:

    标签: google-apps-script google-sheets pdf-generation


    【解决方案1】:

    在处理folderfile 时应检查迭代器。

    我认为folderName 没有命中结果。

    var folders = DriveApp.getFoldersByName(folderName); 
    if (folders.hasNext()) {
      var driveFolder = folders.next();
    }
    

    参考: FolderIterator

    【讨论】:

    • 感谢您的回答。 var options = {headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}} var blobresponse = UrlFetchApp.fetch(url, options); var blob=blobresponse.getBlob().setName(ss.getName() +".pdf" ); var folders = DriveApp.getFoldersByName(folderName); if (folders.hasNext()) { var driveFolder = folders.next();} var file = driveFolder.createFile(blob); file.setName(fileName); 但我现在遇到了这个错误:TypeError: Cannot read property 'createFile' of undefined
    • 没有搜索结果所以没有定义文件夹。
    • 我该如何补救这种情况?
    • 您在命名范围NumAff 中定义了文件夹名称。为什么这样的文件夹不存在?这甚至不是代码的问题。
    • @Mous 将所有内容放到file.setName if 块内{}
    猜你喜欢
    • 2021-10-24
    • 2017-03-29
    • 2020-01-19
    • 2021-08-29
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多