Google Apps Script의 첨부 파일

Jan 06 2021

이메일로 보내기 위해 Google Apps Script에 첨부 파일을 두 개 이상 넣으면 문제가 발생합니다.

이 작업을 수행하는 코드 부분은

      reportPDF = doc.getAs('application/pdf')
      reportPDF.setName('Attachment1 - '+ rows[0][0] + ".pdf");
      
      var file1 = destinationFolder.createFile(reportPDF);  
      var file2 = DriveApp.getFilesByName("test.pdf");

      DriveApp.getFileById(doc.getId()).setTrashed(true);
      
      emails.forEach(function(email) {
      MailApp.sendEmail(email, "Attachments  - " + rows[0][0], "Hello!", {
                        name: 'Good Practices',
                        attachments: [file.getAs(MimeType.PDF), file2]

    });

그러나 이것을 실행할 때 다음과 같은 문제가 있습니다.

예외 : 유효하지 않은 인수 : 첨부 파일 (151 행, "Email"파일)

채워진 .doc 파일 1이 있고 PDF로 변환 된 파일과 이미 PDF 인 다른 파일 2가 있습니다.

file1로 실행하면 이메일을 보낼 수 있지만 file1과 file2로 시도하면이 오류가 발생합니다. 누구든지 무슨 일이 일어날 지 알 수 있습니까?

나는 여기 스택에서 읽은 다른 제안을 많이 실행했지만 그중 아무도 작동하지 않았습니다.

답변

1 Marios Jan 06 2021 at 23:09

설명:

문제는이 file2 아닌 유형의 FILE 만의 객체 FileIterator의 클래스입니다.

반면에, file1 이다 타입의 FILE 하고 올바르게 작동하는 이유입니다.

이메일을 보내기 전에 파일 이름이 있는지 확인하는 것도 좋은 방법입니다.

해결책:

function myFunction() {
  
  reportPDF = doc.getAs('application/pdf')
  reportPDF.setName('Attachment1 - '+ rows[0][0] + ".pdf");

  var file1 = destinationFolder.createFile(reportPDF);  // this is a file
  var folder = DriveApp.getFolderById(folderId); // put here the id of the folder
  var file2 = folder.getFilesByName("test.pdf"); // this is a file iterator

  DriveApp.getFileById(doc.getId()).setTrashed(true);
  
  if (file2.hasNext() ) {
      MailApp.sendEmail(emailAddress, "Attachments  - " + rows[0][0], "Hello!",{
      name: 'Good Practices',                  
      attachments: 
          [
           file1.getAs(MimeType.PDF),
           file2.next().getAs(MimeType.PDF)
          ]    
  })};  
}

참조 :

  • getFilesByName (이름)
  • createFile