无法检索下一个对象:迭代器已到达末尾
Posted
技术标签:
【中文标题】无法检索下一个对象:迭代器已到达末尾【英文标题】: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);
希望有人能解释一下问题的根源。
【问题讨论】:
【参考方案1】:在处理folder
或file
时应检查迭代器。
我认为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
块内
以上是关于无法检索下一个对象:迭代器已到达末尾的主要内容,如果未能解决你的问题,请参考以下文章