Cara Mudah Export Excel Dengan PHP CodeIgniter

Diposting pada

Membuat laporan dalam bentuk excel masih sangat dibutuhkan dalam membuat program, dokumen fisik masih sangat dibutuhkan oleh pengguna. Dalam membuat program kita dihadapkan oleh banyak kondisi, dimana semakin kompleks kondisi tersebut kita membutuhkan library yang memiliki banyak fitur. Salahnya adalah PhpSpreadsheet yang akan membantu kita export excel dengan PHP CodeIgniter.

Ada beberapa mungkin menyarankan export langsung dari format table html, ini bisa saja digunakan jika kalian tidak menggunakan rumus-rumus yang disediakan oleh excel. Namun, idealnya pengguna tetap mendapa kemudahan dari export excel yang kita buat seperti fitur penjumlahan, conditional formating dan membuat chart. Jika menggunakan export dari html maka itu susah untuk dilakukan.

phpspreadsheet

Membuat Excel dengan PphSpreadsheet

Dengan bantuan PhpSpreadsheet kita dapat membuat laporan excel yang sangat komplek sehingga program yang kita buat dapat mengakomodasi lebih banyak kebutuhan user. Jika kalian menggunakan framework CodeIgniter berikut langkah-langkah integrasinya:

Langkah pertama, pastikan setup project kalian sudah siap dan sudah mempunyai composer. Untuk download library PhpSpreadsheet silahkan tambahkan code berikut di composer.json:

"phpoffice/phpspreadsheet": "^1.6"

Langkah kedua, untuk load class dan fungsi dari PhpSpreadsheet silahkan kalian tambahkan code berikut paling atas sebelum nama class pada controller project kalian:

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

Langkah selanjutnya kalian sudah bisa menggunakan fungsi-fungsi dari PhpSpreadsheet, silahkan baca dokumentasinya disini. Jangan lupa sebelum menggunakan fungsinya kalian menginisiasi class-nya.

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

Berikut adalah contoh code membuat excel dengan CodeIgniter dan Library PhpSpreadsheet

Mengatur width column dengan ukuran dan otomatis (menyesuakan isi):

$sheet->getColumnDimension('A')->setWidth(5);
$sheet->getColumnDimension('B')->setAutoSize(true);
$sheet->getColumnDimension('C')->setWidth(10);
$sheet->getColumnDimension('D')->setWidth(8);
$sheet->getColumnDimension('E')->setWidth(8);
$sheet->getColumnDimension('F')->setWidth(8);
$sheet->getColumnDimension('G')->setWidth(8);
$sheet->getColumnDimension('H')->setWidth(8);
$sheet->getColumnDimension('I')->setWidth(8);
$sheet->getColumnDimension('J')->setWidth(8);
$sheet->getColumnDimension('K')->setWidth(14);
$sheet->getColumnDimension('L')->setWidth(8);

Merge Cell untuk menggabungkan kolom

$i = 1;
//title
$sheet->setCellValue('A'.$i, 'ATTENDANCE REPORT BALI PULINA');
$sheet->mergeCells('A'.$i.':L'.$i);

Mengatur posisi teks agar ditengah secara horizontal

//horizontal center
$horizontalCenter = [
    'alignment' => [
    'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
    ]
];

$sheet->getStyle('L'.$start.':L'.$i)->applyFromArray($horizontalCenter);

Mengganti warna kolom (Cell) secara dinamis

public function cellColor($color)
	{
		$cellColor = [
	        'fill' => [
	            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
	            'color' => ['rgb' => $color]
	        ]
    	];

    	return $cellColor;
	}
$sheet->getStyle('K'.$i)->applyFromArray($this->cellColor('FF4500'));

Memberi border pada kolom

//border
//border
$border = [
	'borders' => [
		'allBorders' => [
			'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
			'color' => ['rgb' => '000000'],
		],
	],
];
$sheet->getStyle('A4:L'.($i-1))->applyFromArray($border);

Masih banyak lagi fitur lain yang dapat mempermudah kalian membuat laporan excel, yang pastinya laporan yang sesuai dengan permintaan user. Kebetulan dikantor saya saat ini basis laporan menggunakan excel jadi banyak fitur-fitur dari PhpSpreadsheet perlu saya eksplor.

Untuk sintaks yang lainnya nanti akan saya update, sekiranya akan yang di atas merupakan code yang paling sering saya gunakan saat ini. Semoga dapat membantu dan jangan lupa dibagikan ya!