Hari ini saya akan menulis tentang export data ke excel dari Drupal. Tidak hanya data berupa text saja yang akan di export tetapi akan dibuat juga chart/grafik dari data tersebut.
Agar proses export data ke excel lebih mudah, saya menggunakan library PHPExcel. Tentu saja kita harus menginstall module libraries terlebih dahulu dan menempatkan class-class PHPExcel tersebut di folder libraries.
Proses membuat memasukkan data dan membuat chart di Excel pada prinsipnya seperti berikut ini:
- Load Library PHPExcel dan instantiate PHPExcel.
- Ambil data dari database untuk digunakan di Excel dan sesuaikan dengan kolom-kolom yang akan diisi di excel.
- Load data ke dalam data tersebut ke dalam object pada nomer 1.
- Buat Chart, yaitu: data series (label, axis, value), plot, title, position, dll.
- Simpan object ke file.
- Selesai.
Untuk lebih jelasnya, silahkan lihat potongan kode berikut ini:
// Step 1: Load PHPExcel Library libraries_load('PHPExcel'); // Step 1: Instantiate PHP Excel ke object $objPHPExcel = new PHPExcel(); $objWorksheet = $objPHPExcel->getActiveSheet(); // Step 2: Load data dari database (dalam contoh ini saya menggunakan entity) $prodi = entity_load('programstudi'); // Step 2: Format data (set Header) $arrProdi[] = array(t('Program Studi'), t('Jumlah Mahasiswa')); // Step 2: Format data (set row) foreach ($prodi as $item) { $query = new EntityFieldQuery(); $query->entityCondition('entity_type', 'mahasiswa') ->entityCondition('bundle', 'mahasiswa') ->fieldCondition('field_programstudi', 'target_id', $item->id); $result = array_shift($query->execute()); $arrProdi[] = array( $item->title, sizeof($result) ); } // Step 3: Load data ke Excel object $objWorksheet->fromArray($arrProdi); // Step 4: Membuat Chart // Step 4: Membuat Chart (data series label) $dataseriesLabels = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2'), ); // Step 4: Membuat Chart (data series values x) $xAxisTickValues = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$'.sizeof($arrProdi)), ); // Step 4: Membuat Chart (data series values y) $dataSeriesValues = array( new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$'.sizeof($arrProdi)), ); // Step 4: membuat data series $series = new PHPExcel_Chart_DataSeries( PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping range(0, count($dataSeriesValues)-1), // plotOrder $dataseriesLabels, // plotLabel $xAxisTickValues, // plotCategory $dataSeriesValues // plotValues ); // Step 4: membuat plot sehingga tampilan labelnya vertikal. $series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL); $plotarea = new PHPExcel_Chart_PlotArea(NULL, array($series)); $title = new PHPExcel_Chart_Title(t('Program Studi vs Mahasiswa')); // Step 4: membuat chart $chart = new PHPExcel_Chart( 'chart1', // name $title, // title NULL, // legend $plotarea, // plotArea true, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // Step 4: Set posisi di excel $chart->setTopLeftPosition('D2'); $chart->setBottomRightPosition('P'.sizeof($arrProdi)); // Step 4: menambah chart ke object $objWorksheet->addChart($chart); // Step 5: Menyimpan ke file $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->setIncludeCharts(TRUE); $directory = file_stream_wrapper_get_instance_by_uri('public://reporting')->realpath(); if (!file_exists($directory)) drupal_mkdir($directory); $filename = 'prodi_vs_mahasiswa_'.strtotime(date('Y-m-d H:i:s')).'.xlsx'; $objWriter->save($directory.'/'.$filename); // File path yg dapat digunakan selanjutnya: misalnya memberikan link agar dapat di download $url = file_stream_wrapper_get_instance_by_uri('public://reporting')->getExternalUrl().'/'.$filename;
Contoh hasilnya adalah sebagai berikut:
thanks banget tutorialnya, menambah ilmu saya
wooooh isine mahasiswa kedokteran? 😀
Itu contoh :p