Home > Tip & Trik > Membuat Chart di Excel menggunakan Drupal

Membuat Chart di Excel menggunakan Drupal

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:

  1. Load Library PHPExcel dan instantiate PHPExcel.
  2. Ambil data dari database untuk digunakan di Excel dan sesuaikan dengan kolom-kolom yang akan diisi di excel.
  3. Load data ke dalam data tersebut ke dalam object pada nomer 1.
  4. Buat Chart, yaitu: data series (label, axis, value), plot, title, position, dll.
  5. Simpan object ke file.
  6. 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:

Output Chart di Excel

You may also like
Drupal: Bulk Insert
Ciyeee, Drupal dan WordPress minta update barengan.
[Drupal] Mengubah tampilan menu local task dari tabs menjadi dropdown
Tabulasi data menggunakan views pada Drupal 7

7 Responses