如何在我的代码中将DocsList更新为DriveApp
由于DocsList的折旧,我的脚本从Google Drive中的模板生成PDF文档,并根据电子表格中的列将其电邮给收件人。 请参阅此处: https : //developers.google.com/google-apps/documents-list/
我已经尝试更新以下指南https://developers.google.com/drive/web/migration以使用DriveApp更新DocsList的所有实例,但是我无法使其工作。 有人可以帮我更新这个脚本正常工作吗? 我在这个脚本中有6个“DocsList”实例,我可以正确地更新其中的一些,但其他的如“addFile”似乎需要不同的格式。 即使试图简单地find并用“DriveApp”replace“DocsList”,我得到以下错误信息:
“types错误:找不到函数addFile对象ProofOfCredit_CNZDTVR44N.pdf。(第45行,文件”ProofOfCreditCode“)”
我会很感激任何的build议和帮助,因为这个折旧打破了我的脚本5这几乎是相同的这个。
var docTemplate = "1JAPmsrPRrRwXCVAli229C5J7Kr4xaOnfO2rmGqvYyhU"; var docName = "ProofOfCredit"; function onFormSubmit(e) { var first_name = e.values[1]; var last_name = e.values[2]; var customer_email = e.values[3]; var order_number = e.values[4]; var brand = e.values[5]; var amount = e.values[6]; var date_of_credit = e.values[7]; var auth_code = e.values[8]; var last_4 = e.values[9]; var request_id = e.values[10]; var rep_name = e.values[11]; var copyId = DocsList.getFileById(docTemplate) .makeCopy(docName+'_'+order_number) .getId(); var copyDoc = DocumentApp.openById(copyId); var copyBody = copyDoc.getActiveSection(); copyBody.replaceText('keyFirst', first_name); copyBody.replaceText('keyLast', last_name); copyBody.replaceText('keyBrand', brand); copyBody.replaceText('keyAmount', amount); copyBody.replaceText('keyCreditdate', date_of_credit); copyBody.replaceText('keyAuth', auth_code); copyBody.replaceText('keyRep', rep_name); copyBody.replaceText('keyOrder', order_number); copyBody.replaceText('keyCClast4', last_4); copyBody.replaceText('keyRequestID', request_id); var todaysDate = Utilities.formatDate(new Date(), "GMT", "MM/dd/yyyy"); copyBody.replaceText('keyTodaysDate', todaysDate); copyDoc.saveAndClose(); var pdf = DocsList.getFileById(copyId).getAs("application/pdf"); var folder = DocsList.getFolder('Proof of Credit'); var movefile = DocsList.createFile(pdf); movefile.addToFolder(folder); movefile.removeFromFolder(DocsList.getRootFolder()); var subject = "Proof of Credit regarding Order Number: " + order_number; var body = "Hello " + first_name + " " + last_name + "," + "<br /><br />" + "Thank you for calling " + brand + " Support. The attached document contains information " + "for you to reference related to the credits we have issued back to your original form of payment." + "<br /><br />" + "If you have any further questions or require additional assistance please let us know." + "<br /><br />" + "Regards," + "<br /><br />" + rep_name + ", Payments Department" + "<br />" + "test@test.com"; var cc = "test@test.com"; MailApp.sendEmail(customer_email, subject, body, {htmlBody: body, attachments: pdf, cc: cc}); DocsList.getFileById(copyId).setTrashed(true); }
许多DriveApp
方法与DocsList
相同。 因此,在很多情况下,您可以简单地将DocsList
replace为DriveApp
。
旧的getFolder()
方法出现问题。
var folder = DocsList.getFolder('Name of your folder');
在这种情况下,简单地用DriveApp
replaceDocsList
会给你一个问题。 getFolder()
没有getFolder()
方法。 在Google云端硬盘中,您可以拥有多个具有相同名称(但ID不同)的文件和文件夹。 旧的DocsList
, getFolder()
方法没有考虑到这种情况。 使用DriveApp
,您仍可以按名称search文件夹,但返回的是Folder Iterator
。 使用DriveApp
,通过名称获取文件夹的方法名称稍有不同; 它是“文件夹”,最后是“s”。 getFoldersByName(name)
复数,而不是单数。 所以,即使98%的时间,通过名字获取文件夹只会导致一个文件夹,你仍然需要处理Folder Iterator
。 你不需要遍历文件夹迭代器。 你可以得到第一个文件夹。 只需使用next()
方法而不使用编程循环。
文件夹迭代器
所以,我build议你只是用DriveApp
replaceDocsList
,除非按名称获取文件夹。 阅读文档,并修复该代码行,然后运行它。 如果出现错误,请查看 EXECUTION TRANSCRIPT ,它可能会告诉你哪行代码失败。 如果您仍然需要帮助,请始终发布代码行失败。
此外,新的DriveApp文件夹类没有addToFolder()
方法。
文件夹类
您需要将其更改为:
folder.addFile(moveFile);
addFile()方法
DriveApp中没有“添加到文件夹”文件对象的方法。 相反,您需要获取文件夹(它看起来像存储在var文件夹中),然后使用Folder对象添加文件。 它看起来像这样:
var folder = DriveApp.getFolderById(string id); var movefile = DocsList.createFile(pdf); folder.addFile(moveFile);
您可以使用Folder对象将文件添加到文件夹,但DriveApp没有File对象将其自身添加到文件夹的方法。