gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:36:49 24 4
gpt4 key购买 nike

我的脚本从 Google 云端硬盘中的模板生成 pdf 文档,并根据电子表格中的列将其通过电子邮件发送给收件人,由于 DocsList 的贬值,今天停止工作。看这里:https://developers.google.com/google-apps/documents-list/

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

“类型错误:在对象 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);
}

最佳答案

许多 DriveApp 方法与 DocsList 相同。因此,在许多情况下,您可以简单地将 DocsList 替换为 DriveApp

旧的 getFolder() 方法会出现问题。

var folder = DocsList.getFolder('Name of your folder');

在这种情况下,简单地将 DocsList 替换为 DriveApp 会给您带来问题。 DriveApp 没有getFolder() 方法。在 Google 云端硬盘中,您可以拥有多个名称相同(但 ID 不同)的文件和文件夹。旧的DocsListgetFolder()方法没有考虑到这种情况。使用 DriveApp,您仍然可以按名称搜索文件夹,但返回的是一个 Folder Iterator。在 DriveApp 中,按名称获取文件夹的方法名称略有不同;它是“文件夹”,末尾有一个“s”。 getFoldersByName(name) 复数,而不是单数。因此,即使在 98% 的情况下,按名称获取文件夹只会得到一个文件夹,您仍然需要处理 Folder Iterator。您不需要遍历文件夹迭代器。你可以只得到第一个文件夹。无需使用编程循环,只需使用 next() 方法即可。

Folder Iterator

因此,我建议您只需将 DocsList 替换为 DriveApp,按名称获取文件夹的情况除外。阅读文档,修复该行代码,然后运行它。如果您遇到错误,请查看EXECUTION TRANSCRIPT,它可能会告诉您哪一行代码失败了。如果您仍然需要帮助,请始终发布失败的代码行。

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

Folder Class

您需要将其更改为:

folder.addFile(moveFile);

addFile() Method

关于javascript - 如何在我的代码中将 DocsList 更新为 DriveApp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29777164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com