我有一个来自谷歌表单的注册表格,如果有人填写了申请表,那么我会收到一份包含文本和图像的 pdf 报告。但该文件未保存在我的 Google 云端硬盘中。
我的问题是,如何将 pdf 文件也保存在我的谷歌驱动器上,并从电子表格中的响应创建下载链接 pdf 文件。
我的代码如下..
var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");
var subject = "This is form";
var body = "Data: " + name + "";
MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf});
DriveApp.getFileById(copyId).setTrashed(true);
var BLOBPDF = copyId.getAs(MimeType.PDF);
var pdf = PDF_folder.createFile(BLOBPDF).setName(pdfName);
var fileUrl = PDF_folder.createFile(BLOBPDF).setName(pdfName).getDownloadUrl();
sheet.getRange(index + 1, 5).setValue(fileUrl)
}
您正在对文件 ID(字符串)调用getAs:
var BLOBPDF = copyId.getAs(MimeType.PDF);
这是File类的一个方法,您应该在其上使用它。更重要的是,您已经在检索上面几行的 pdf blob,无需重复此过程:
var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");
因为您使用getAs
错误,BLOBPDF
所以不是所需的 blob(实际上,脚本在尝试使用getAs
字符串时可能会抛出错误,因此它正在停止执行)。您可以改为执行以下操作,以便将文件保存在云端硬盘中:
var pdf_drive = PDF_folder.createFile(pdf).setName(pdfName);
代码的结尾可能是这样的(请参阅内联注释):
// ...
var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");
var subject = "This is form";
var body = "Data: " + name + "";
MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf});
DriveApp.getFileById(copyId).setTrashed(true);
var pdf_drive = PDF_folder.createFile(pdf).setName(pdfName); // Save file in PDF folder
var fileUrl = pdf_drive.getDownloadUrl(); // Get file download URL
var rowIndex = e.range.getRow(); // Get submitted row in sheet based on event object
var sheet = e.range.getSheet(); // Get submitted sheet based on event object
sheet.getRange(rowIndex, 5).setValue(fileUrl); // Write download URL
}
我不确定您目前如何检索sheet
and index
,但我会使用onFormSubmit
事件对象将 URL 写入提交行的 E 列,如上面的代码片段所示。如果这不是您想要的并且您有其他方法来检索sheet
and index
,请从代码片段中删除相应的行并保留您当前的sheet.getRange(index + 1, 5).setValue(fileUrl);
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句