folder.createFile(theBlob)未按技术规范返回File对象?求解
问题:Google Apps Script里调用
folder.createFile(blob)为啥有时只返回文件名,不是File对象? 我来梳理下你的问题和可能的原因:
你的情况回顾
你本来想从谷歌表格生成PDF Blob,然后通过folder.createFile()创建文件,按照Google官方文档,这个方法应该返回File对象,这样你直接调用getId()就能拿到文件ID。但昨天折腾了半小时,newPDF只返回文件名,根本没法直接调用getId(),只能绕个大弯,通过文件名搜索文件再拿ID:
// 昨天的临时解决代码 var hasNext = DriveApp.getFilesByName(fileXID).hasNext() if (hasNext) { var newPDF_fileX = DriveApp.getFilesByName(newPDF).next() var newPDFID = newPDF_fileX.getId() }
结果今天再运行同样的代码,居然完全正常了:
function createPDF1() { var ss = SpreadsheetApp.getActive() var theBlob = ss.getBlob().getAs('application/pdf').setName("testingPDF.pdf") var folderX = DriveApp.getFolderById("root") var fileX = folderX.createFile(theBlob) var fileXID = fileX.getId() Logger.log(fileXID) }
大概率是这些原因导致的间歇性异常
这种情况我也碰到过几次,基本都是Google服务端或者脚本运行环境的临时问题,和你的代码逻辑无关:
- Drive服务临时波动:Google Apps Script的底层服务偶尔会抽风,接口返回不符合预期的结果,这种情况是间歇性的,过段时间自己就好了。
- 授权/缓存异常:如果是刚给脚本授权,或者浏览器缓存了旧的脚本状态,可能导致方法行为异常。关闭脚本编辑器、清一下浏览器缓存,或者重新走一遍授权流程,大概率能解决。
- 极小概率的Blob元数据问题:虽然你已经给Blob设了文件名,但极端情况下如果Blob的元数据没正确传递,可能影响返回值,但你今天正常运行的情况已经排除了这个可能。
后续再遇到的解决建议
如果之后又碰到这种情况,可以按下面的步骤试:
- 关掉脚本编辑器,重新打开,清一下浏览器缓存再运行
- 触发重新授权:比如修改脚本后重新运行,会弹出授权提示,重新授权试试
- 先等个10-15分钟再测试,这类临时服务问题一般很快会修复
内容的提问来源于stack exchange,提问作者bryanp
相关产品推荐
相关产品推荐

