如何在我的代码中将DocsList更新为DriveApp

cwg*_*g83 7 javascript google-docs-api google-apps-script

我的脚本从Google云端硬盘中的模板生成pdf文档,并根据电子表格中的列通过电子邮件将其通过电子邮件发送给收件人,因为DocsList已弃用.请参阅此处:https://developers.google.com/google-apps/documents-list/

我尝试按照本指南https://developers.google.com/drive/web/migration更新,以使用DriveApp更新DocsList的所有实例,但我无法让它工作.有人可以帮我更新这个脚本以正常工作吗?我在这个脚本中有6个"DocsList"实例,我能够正确更新其中一些实例,但其他诸如"addFile"似乎需要不同的格式.即使在尝试简单地找到并用"DriveApp"替换"DocsList"之后,我也会收到以下错误消息:

"TypeError:无法在对象ProofOfCredit_CNZDTVR44N.pdf中找到函数addFile.(第45行,文件"ProofOfCreditCode")"

我很感激任何建议和帮助,因为这个折旧打破了我的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);
}
Run Code Online (Sandbox Code Playgroud)

Ala*_*lls 10

许多DriveApp方法都是相同的DocsList.因此,在许多情况下,您可以简单地替换DocsListDriveApp.

getFolder()方法出现问题.

var folder = DocsList.getFolder('Name of your folder');
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只需更换DocsListDriveApp会给你一个问题.没有getFolder()办法DriveApp.在Google云端硬盘中,您可以拥有多个名称相同的文件和文件夹(但ID不同).旧的DocsList,getFolder()方法没有考虑这种情况考虑在内.使用DriveApp,您仍然可以按名称搜索文件夹,但返回的是Folder Iterator.使用DriveApp按名称获取文件夹的方法名称略有不同; 它是"文件夹",最后带有"s". getFoldersByName(name)多元而非单数.因此,即使98%的时间,按名称获取文件夹只会产生一个文件夹,您仍然需要处理Folder Iterator.你并不需要在文件夹迭代循环.你可以得到第一个文件夹.只需在next()不使用编程循环的情况下使用该方法.

文件夹迭代器

所以,我建议你不要只是更换DocsListDriveApp除了名字得到一个文件夹的情况.阅读文档,修复该行代码,然后运行它.如果你得到一个错误,VIEW执行纪录,它可能会告诉你什么行代码失败.如果您仍需要帮助,请始终发布哪行代码失败.

此外,没有addToFolder()新的DriveApp Folder类的方法.

文件夹类

您需要将其更改为:

folder.addFile(moveFile);
Run Code Online (Sandbox Code Playgroud)

addFile()方法