CodeIgniter 3: Export Excel Dari HTML
Cara export atau membuat file Excel dari HTML menggunakan library PhpSpreadsheet di CodeIgniter 3
Hasil export nya rapi dan sesuai dengan format. Bisa di open, di edit isinya, di save, semuanya lancar. Bahkan bisa dibuka juga di WPS Office.
Download library menggunakan composer
composer require phpoffice/phpspreadsheet
Set autoload composer di file application/config/config.php
$config['composer_autoload'] = 'vendor/autoload.php';
Buat file view application/views/excel.php
sebagai template yang akan di export ke Excel nantinya
<h3>LAPORAN DATA REGISTRASI</h3>
<table>
<thead>
<tr>
<th>No</th>
<th>Tanggal</th>
<th>Nama Siswa</th>
<th>Nomor WA</th>
</tr>
</thead>
<tbody>
<?php $no = 1 ?>
<?php foreach ($registrasi as $row) : ?>
<tr>
<td><?= $no++ ?></td>
<td><?= $row['tanggal'] ?></td>
<td><?= $row['nama_siswa'] ?></td>
<td><?= $row['nomor_wa'] ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
Di controller bikin method untuk export excel, contoh URL laporan/excel
application/controllers/Laporan.php
use PhpOffice\PhpSpreadsheet\Reader\Html;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class Laporan extends CI_Controller
{
// ...
public function excel()
{
// load data dari model
$data['registrasi'] = $this->registrasi_model->findAll();
// view template
$html = $this->load->view('excel', $data, TRUE);
$reader = new Html();
$spreadsheet = $reader->loadFromString($html);
$worksheet = $spreadsheet->getActiveSheet();
// merge cell A1 sampai D1
// karena tabel yang digunakan 4 kolom
// maka header nya di merge 4 cell
$worksheet->mergeCells('A1:D1');
// setelah di merge lalu di center horizontal
$worksheet->getStyle('A1:D1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
// tambahkan baris kosong di row ke-2
// supaya setelah header gak langsung ke tabel
$worksheet->insertNewRowBefore(2, 1);
// set style untuk semua cell
$style = [
'font' => ['size' => 12],
'alignment' => ['vertical' => Alignment::VERTICAL_TOP],
];
$worksheet->getStyle($worksheet->calculateWorksheetDimension())->applyFromArray($style);
// set lebar kolom auto size, jadi lebih rapi
foreach ($worksheet->getColumnIterator() as $column) {
$worksheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
}
// tambahkan border tapi hanya untuk tabel/datanya
// A3 berarti baris ketiga, karena yang pertama header, kedua baris kosong
// range sampai cell D karena empat kolom datanya
$worksheet->getStyle('A3:D' . $worksheet->getHighestRow())->applyFromArray([
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN
]
]
]);
// header untuk auto download, filename bisa diganti untuk nama file hasil export
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=laporan-registrasi.xlsx");
header("Cache-Control: max-age=0");
$writer = new Xlsx($spreadsheet);
$writer->save("php://output");
exit();
}
}
Selesai. Jika URL laporan/excel
diakses, maka akan langsung mengunduh file excel nya.