Lampiran di Google Apps Script

Jan 06 2021

Saya mengalami masalah saat saya memasukkan lebih dari satu lampiran di Skrip Google Apps untuk dikirim dalam email.

Bagian dari kode yang melakukan ini adalah

      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]

    });

Tetapi ketika saya menjalankan ini, saya Memiliki masalah ini:

Pengecualian: Argumen tidak valid: lampiran (baris 151, file "Email")

Saya memiliki file .doc1 yang diisi dan kemudian dikonversi ke PDF dan file2 lain yang sudah menjadi PDF.

Ketika saya menjalankan hanya dengan file1, saya dapat mengirim email, tetapi ketika saya mencoba dengan file1 dan file2, saya mengalami kesalahan ini. Adakah yang tahu apa yang mungkin terjadi?

Saya menjalankan banyak saran lain yang saya baca di sini dalam tumpukan, tetapi tidak ada yang berhasil.

Jawaban

1 Marios Jan 06 2021 at 23:09

Penjelasan:

Masalahnya adalah bahwa file2 bukan tipe FILE tetapi objek dari kelas FileIterator .

Di sisi lain, file1 adalah tipe FILE dan inilah mengapa ia bekerja dengan baik.

Ini juga merupakan praktik yang baik untuk memeriksa apakah nama file sudah ada sebelum Anda mengirim email.

Larutan:

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)
          ]    
  })};  
}

Referensi:

  • getFilesByName (nama)
  • createFile