Untuk referensi: Ini Google Formulir saya< /a>.

Ini Lembar Kosong Google PE yang telah terkait dengan output Formulir Google saya (jawaban akan ditampilkan pada tab Respons Formulir 2).


Saya telah membuat Formulir Google yang mampu mengumpulkan sedikit data yang bagus. Ini dimaksudkan untuk diisi oleh manajer yang meminta izin SAP untuk karyawan baru.

Mereka melanjutkan melalui Formulir dan memasuki departemen utama mereka (SAP Stream) yang membawa mereka ke halaman/bagian berikutnya yang memungkinkan manajer untuk memeriksa izin yang diperlukan karyawan.

Terkadang, seorang karyawan akan berinteraksi dengan beberapa departemen, sehingga opsi untuk SAP Stream pendukung/sekunder ada di halaman kedua. Ini dapat dilanjutkan sesuai kebutuhan hingga semua peran/izin yang diperlukan karyawan dikumpulkan di Google Spreadsheet.

Di Lembar, Anda akan melihat bahwa:

  • Kolom A-F mencakup informasi dasar
  • Kolom H-T adalah untuk Tanggung Jawab Pekerjaan
  • Kolom U-AG adalah rentang untuk informasi Aliran SAP Pendukung seseorang
  • Kolom AH-AT adalah Tanggung Jawab Pekerjaan Mendukung SAP Stream
  • Kolom AU-BG mengumpulkan Aliran SAP Pendukung Sekunder

Saya telah membangun bahasa Google Script untuk mengumpulkan setiap bit informasi ini dalam variabel yang kemudian akan dideklarasikan sebagai variabel global sehingga dapat diteruskan ke halaman HTML di App Script.

Akhirnya, email yang terdiri dari halaman HTML ini akan dikirim ke manajer yang bertanggung jawab untuk menunjuk izin SAP.

Semuanya berfungsi dengan baik sejak pembaruan terakhir saya. Email akan dikirim dan variabel mengumpulkan informasi dari rentang sel yang saya targetkan. Tetapi outputnya penuh dengan koma yang memisahkan nilai yang dikembalikan.

Tangkapan layar hasil email

Apakah sel-sel yang tidak memiliki apa-apa dimasukkan dan dipisahkan dengan koma? Atau adakah kesalahan lain yang saya lakukan dengan variabel saya?


Sunting:

Berikut adalah contoh dari beberapa bagian yang relevan dari kode saya:

function sendEmail_v3() {

  // get the spreadsheet information
  const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //const responseSheet = ss.getSheetByName('Form Responses 1');
  const data = ss.getDataRange().getValues();
  //console.log(data);



  // Loop over the rows
  data.forEach((row,i) => {

    // Identify whether notification has been sent
    if (row[59] === '') {

      // Get the Form info
      var emailTo = "xxxxxx@gmail.com"
      var subject = 'SAP Role Request Subject';
      const Timestamp = row[0];
      var emailAddress = row[1];
      var name = row[2];
      var department = row[3];
      var userID = row[4];
      var SAP_Stream = row[5];
      var valuesA = ss.getRange(i,8,1,13).getValues();
      var jobResponsibilities = valuesA;
      var valuesB = ss.getRange(i,21,1,13).getValues();
      var supportingSAP = valuesB;
      var valuesC = ss.getRange(i,34,1,13).getValues();
      var secondaryJob = valuesC;
      var valuesD = ss.getRange(i,47,1,13).getValues();
      var secondarySAP = valuesD;




 formTime = Timestamp;
  formEmail = emailAddress;
  formName = name;
  formUserID = userID;
  formSAP_Stream = SAP_Stream;
  formDepartment = department;
  formResponsibilities = jobResponsibilities;
  formSupportingSAP = supportingSAP + "," + secondarySAP;
  formSecondaryJob = secondaryJob;

  let body = '';

  // Write the email in email.html
    var html = HtmlService.createTemplateFromFile("email.html");
    var htmlText = html.evaluate().getContent();
    var options = {htmlBody: htmlText};
  
  // Send the email
  GmailApp.sendEmail(emailTo,subject,'',{htmlBody: htmlText});

  // Mark as Notified
  const g = 'Notification sent';
  ss.getRange(i + 1,60).setValue(g);

  }
});
}

Variabel global ditarik ke bagian terpisah dari Google Script dalam file HTML yang dikirim melalui email. Email yang dihasilkan terlihat seperti ini:

Tangkapan layar hasil email

Saya membayangkan ada fungsi lain atau beberapa kode yang dapat saya tambahkan ke baris dengan variabel nilai yang akan membantu menghindari hasil NULL.

Var nilaiA = ss.getRange(i,8,1,13).getValues();

1
Jeff Abrahams 13 Mei 2021, 21:31

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan filter, concat dan join sebagai gantinya. Dalam kasus Anda, karena datanya juga array 2D, Anda juga perlu melakukan flat pada data tersebut sebelum menggunakan concat. Periksa kode di bawah ini. Gunakan concat daripada menambahkan 2 array secara langsung menggunakan +. Saya telah membandingkan kode Anda dan kode di bawah ini pada bagian Log dan Output:

Kode:

formSupportingSAP = supportingSAP.flat().concat(secondarySAP.flat()).filter(Boolean).join(", ");

Log dan Keluaran:

logs and output

Referensi/Catatan:

  • flat() ke dapatkan persamaan array 1 dimensi
  • concat() ke menggabungkan 2 array
  • filter() untuk memfilter sel kosong
  • join() ke gabungkan menjadi string dengan pembatas ", "
1
NaziA 13 Mei 2021, 21:24