About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Generate String dari Template dengan Sumber Data Excel
PHP

Generate String dari Template dengan Sumber Data Excel

Di dalam sebuah aplikasi untuk mengirim pesan massive, seperti software SMS blast, WhatsApp blast, dll., biasanya terdapat sebuah fitur di mana pengguna dapat mengimport data dari sebuah file Excel. Kemudian, dengan menggunakan sebuah template pesan yang di dalamnya terdapat tag-tag tertentu, akan bisa dihasilkan sebuah pesan di mana tag tersebut nantinya akan berisi data yang bersumber dari Excel tadi.

Terkait dengan hal di atas, tutorial kali ini akan membahas bagaimana ide untuk mengenerate string dari template ber-tag yang datasource-nya diambil dari data Excel. Adapun implementasi ide ini nantinya menggunakan PHP.

Sebagai contoh kasus, misalkan diberikan sebuah data file Excel sebagai berikut:

Data Excel sebagai sumber

File di atas terdapat empat kolom yaitu ‘nis’, ‘namasiswa’, ‘kelas’, dan ‘spp’.

Selanjutnya dengan menggunakan string template ber-tag sbb (dibuat mirip dengan tag permalinknya WordPress 🙂 ):

"Selamat pagi, besar SPP %namasiswa% (NIS: %nis%, Kelas: %kelas%) bulan ini adalah Rp %spp%."

akan digenerate string seperti di bawah ini.

Output yang diharapkan

Di dalam template tersebut, terdapat beberapa tag yaitu: %namasiswa%, %nis%, %kelas%, dan %spp%. Tag ini nanti akan diganti dengan value yang bersumber dari Excel, di mana nama tag bersesuaian dengan nama kolom di Excelnya.

Ide Penyelesaian

Dari permasalahan yang diberikan di atas, kita coba menyusun ide penyelesaiannya dengan langkah sebagai berikut:

  1. Baca data file Excel.

    File Excel nantinya dibaca dengan menggunakan library PHPSpreadsheet. (baca cara instalasinya).
  2. Dari file Excel, dapatkan semua nama kolom-kolomnya dan simpan ke dalam array.

    Mekanisme ini sama seperti tutorial export Excel ke JSON sebelumnya. Sehingga dari contoh yang diberikan di atas, akan didapatkan sebuah array:
    array('nis', 'namasiswa', kelas', 'spp')
  3. Dari template ber-tags yang diberikan, baca semua tags nya lalu simpan ke dalam array.

    Dalam contoh di atas, maka nantinya akan didapatkan sebuah array:
    array('%namasiswa%', '%nis%', '%kelas%', '%spp%')
  4. Untuk setiap baris data Excel yang dibaca, buat sebuah array asosiatif dengan key dari array yang berasal dari langkah no 2, dan valuenya adalah data value tiap cell di Excel.

    Misalnya untuk baris pertama:
    array('nis'=>1001, 'namasiswa'=>'Siswa 1', kelas'=>'1A', 'spp'=>450000)
  5. Untuk setiap tags yang telah didapat dari langkah no 3, hapus karakter ‘%’ .

    Misalnya ‘%namasiswa%‘ diubah menjadi 'namasiswa', '%nis%' berubah menjadi 'nis' dst. Ini nanti akan digunakan sebagai key untuk mengakses value dari array asosiatif yang didapat dari langkah no. 4
  6. Untuk setiap tags yang didapat dari langkah no. 3, lakukan replace tag dari template dengan value yang didapat dari array asosiatif dari langkah no 4.

Langkah 4, 5, dan 6 di atas dilakukan untuk setiap baris data Excel yang dibaca.

Implementasi di Script PHP

Selanjutnya, kita implementasikan ide penyelesaian di atas dengan script PHP. Misalkan file data Excel yang akan digunakan sebagai datasource adalah ‘data.xlsx‘, script untuk mengenerate string dengan template adalah sebagai berikut:

<?php

// membuka file Excel dg PHPSpreadSheet

require 'vendor/autoload.php';

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);

// setting nama file yg akan dibaca
$spreadsheet = $reader->load("data.xlsx");

// data worksheet yg akan dibaca ada di active sheet
$worksheet = $spreadsheet->getActiveSheet();

// mendapatkan maks nomor baris data
$highestRow = $worksheet->getHighestRow();
// mendapatkan maks kolom data
$highestColumn = $worksheet->getHighestColumn();

// template string
$template = "Selamat pagi, besar SPP %namasiswa% (NIS: %nis%, Kelas: %kelas%) bulan ini adalah Rp %spp%.";

// reguler expression untuk mendapatkan tags '%..%' di dalam template
preg_match_all("/%[a-z]+%/", $template, $tags);

// mendapatkan nama-nama kolom data
$colsName = array();
for($col='A'; $col<=$highestColumn; $col++){
	$colsName[] =  $worksheet->getCell($col . 1)->getValue();
}

// proses membaca data baris-perbaris
for($row=2; $row<=$highestRow; $row++){
	// inisialisasi array untuk data perbaris
	$dataRow = array();

	$i = 0;
	// untuk setiap baris data, baca value tiap kolom cell
	for($col='A'; $col<=$highestColumn; $col++){
		// setiap value digabung menjadi satu
		// dan tambahkan ke array $dataRow
		$dataRow += array($colsName[$i] => $worksheet->getCell($col . $row)->getValue());
		$i++;
	}

	$output = $template;

	// untuk setiap tags %...% yang didapatkan lakukan ...
	foreach ($tags[0] as $tag) {
		// menghapus karakter '%' akan gunakan sebagai key array tanpa '%''
		$clearTag = str_replace("%", "", $tag);
		// mereplace %...% di dalam template dengan data value berdasarkan key
		$output = str_replace($tag, $dataRow[$clearTag], $output);
	}

	// mencetak output
	echo $output."<br>";
}

?>

Penjelasan script:

  • Untuk mendapatkan semua tags di dalam string template, digunakan function preg_match_all("/%[a-z]+%/", $template, $tags);. Dalam hal ini, reguler expression yang digunakan adalah "/%[a-z]+%/". Hasil dari function ini adalah $tags berupa array 1 dimensi.
  • Adapun untuk mereplace tag dengan value dari data Excel, digunakan function str_replace().

Dari pembahasan ini, silakan dikembangkan sendiri sesuai keperluan yang diinginkan. Semoga artikel ini dapat dipahami dengan mudah dan memberikan manfaat.

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply