Google Apps Script创建子文件夹并移入PDF时报参数不匹配错误
问题分析与解决方案
错误原因
你遇到的报错是因为DriveApp.Folder.moveTo()方法不接受字符串类型的文件夹ID作为参数,它要求传入的是DriveApp.Folder对象。你代码里直接传了父文件夹的ID字符串,导致方法签名不匹配。
修正方案
有两种方式解决这个问题:
方式1:先获取父文件夹对象,再移动
先通过文件夹ID获取对应的Folder实例,再调用moveTo方法传入这个对象:
function convertToPDF() { var documentId = "1IeY_KXhhdUbPcLIi1WL_nd8AUky5eLDk48Ql1sW6sII"; var document = DocumentApp.openById(documentId); var dynamicId = "12XPDcrng6nZ7ibGziAwNT8eaZ7DYHDoXy3OnknWzyAI" let cell = "B17"; var sheet = SpreadsheetApp.openById(dynamicId); var offerName = sheet.getRange(cell).getValue(); var blob = document.getAs('application/pdf'); var pdfFile = DriveApp.createFile(blob).setName(offerName + "_offer" + ".pdf"); var parentFolderId = "17bvQ3LkYPd1Es68G0HsoAgRXijSBGdKw"; var folderName = offerName + "_offer"; var newFolder = DriveApp.createFolder(folderName); // 先获取父文件夹对象 var parentFolder = DriveApp.getFolderById(parentFolderId); // 传入Folder对象执行移动 newFolder.moveTo(parentFolder); pdfFile.moveTo(newFolder); Logger.log(offerName); }
方式2:直接在父文件夹内创建子文件夹(更高效)
不需要先创建根目录文件夹再移动,直接在目标父文件夹下创建子文件夹,减少一步操作:
function convertToPDF() { var documentId = "1IeY_KXhhdUbPcLIi1WL_nd8AUky5eLDk48Ql1sW6sII"; var document = DocumentApp.openById(documentId); var dynamicId = "12XPDcrng6nZ7ibGziAwNT8eaZ7DYHDoXy3OnknWzyAI" let cell = "B17"; var sheet = SpreadsheetApp.openById(dynamicId); var offerName = sheet.getRange(cell).getValue(); var blob = document.getAs('application/pdf'); var pdfFile = DriveApp.createFile(blob).setName(offerName + "_offer" + ".pdf"); var parentFolderId = "17bvQ3LkYPd1Es68G0HsoAgRXijSBGdKw"; var folderName = offerName + "_offer"; // 直接在父文件夹内创建子文件夹 var parentFolder = DriveApp.getFolderById(parentFolderId); var newFolder = parentFolder.createFolder(folderName); pdfFile.moveTo(newFolder); Logger.log(offerName); }
关键修改说明
- 替换
newFolder.moveTo("文件夹ID")为newFolder.moveTo(父文件夹对象),或者直接在父文件夹下创建子文件夹 - 确保所有涉及文件夹操作的方法参数符合官方API要求:
moveTo方法的参数必须是Folder类型,而非字符串ID
内容的提问来源于stack exchange,提问作者Philip Henry
相关产品推荐
相关产品推荐

