123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- require_once (__DIR__.SLASH.'..'.SLASH.'constant.php');
- require_once (LIB_PATH.'XLSXWriter'.SLASH.'XLSXWriter.class.php');
- require_once (LIB_PATH.'SimpleXLSX'.SLASH.'SimpleXLSX.class.php');
- class Excel
- {
- //Parse un fichier xlsx et retourne le contenu
- public static function parse($xlsxFile) {
- return SimpleXLSX::parse($xlsxFile);
- }
-
- /**
- * Retourne le contenu d'un tableau convertit au format XLSX
- * @param array $rows le tableau avec les lignes à exporter dans le fichier
- * @param array $mapping le mapping qui permet d'ajouter des libellé en fct des clés de colonne
- * Structure du tableau de mapping attendu : aaray(
- * 'Label' => 'clé',
- * 'Autre label' => 'autre clé',
- * etc...
- * );
- * @param string $sheetname le nom à donner à la feuille de calcul courante
- * @return string le stream du fichier généré
- */
- public static function exportArray($rows, $mapping, $sheetname='Classeur 1'){
- $data = $header = array();
- $style = array(
- 'border' => 'top,left,bottom,right',
- 'border-style' => 'thin'
- );
- if(empty($mapping) && isset($rows[0])){
- foreach($rows[0] as $key=>$value){
- $mapping[$key] = $key;
- }
- }
- foreach ($rows as $key => $item) {
- $itemContent = array();
- if (isset($mapping)) {
- foreach ($mapping as $label => $slug) {
- $header[$label] = 'string';
- isset($item[$slug]) ? array_push($itemContent, $item[$slug]) : array_push($itemContent, '');
- }
- } else {
- foreach ($item as $field => $value) {
- array_push($itemContent, $item[$field]);
- }
- }
- array_push($data, $itemContent);
- }
-
- ob_start();
- $excel = new XLSXWriter();
- $excel->writeSheetHeader($sheetname, $header, array_merge($style, array('font-style'=> 'bold','border-color' => '#2a2a28')));
- foreach($data as $row)
- $excel->writeSheetRow($sheetname, $row, array_merge($style, array('border-color' => '#cecece')));
- $excel->writeToStdOut();
- $output = ob_get_clean();
- return $output;
- }
- /**
- * Export de données sur plusieurs feuilles Excel
- * @param array $content [Contenu à exporter]
- * Format du tableau de contenu attendu :
- * array(
- * 'Classeur 1' => array(
- * 'mapping' => array(
- * 'Libellé' => 'slug',
- * 'Libellé' => 'slug',
- * 'Libellé' => 'slug'
- * ),
- * 'rows' => array(
- * 0 => objet/entité exporté,
- * 1 => objet/entité exporté,
- * 2 => objet/entité exporté
- * )
- * ),
- * 'Classeur 2' => array(
- * 'mapping' => array(
- * 'Libellé' => 'slug',
- * 'Libellé' => 'slug',
- * 'Libellé' => 'slug'
- * ),
- * 'rows' => array(
- * 0 => objet/entité exporté,
- * 1 => objet/entité exporté,
- * 2 => objet/entité exporté
- * )
- * ), etc...
- * );
- * On place généralement $response['rows'] dans l'index 'rows' d'une feuille Excel
- *
- * @param string $filename [Nom du fichier à exporter]
- *
- * @return string [Fichier XSLX]
- */
- public static function exportMultipleSheets($content){
- $commonStyle = array('border'=> 'top,left,bottom,right', 'border-style'=> 'thin');
- $headerStyle = array_merge($commonStyle, array('font-style'=> 'bold','border-color'=> '#2a2a28'));
- $contentStyle = array_merge($commonStyle, array('border-color'=> '#cecece'));
- $styles = array(
- 'header' => $headerStyle,
- 'content'=> $contentStyle
- );
- $excel = new XLSXWriter();
- foreach ($content as $sheetName => $sheetContent) {
- $data = $header = array();
- foreach ($sheetContent['rows'] as $key => $item) {
- $itemContent = array();
- if (isset($sheetContent['mapping'])) {
- foreach ($sheetContent['mapping'] as $label => $slug) {
- $header[$label] = 'string';
- isset($item[$slug]) ? array_push($itemContent, $item[$slug]) : array_push($itemContent, '');
- }
- } else {
- foreach ($item as $field => $value) {
- array_push($itemContent, $item[$field]);
- }
- }
- array_push($data, $itemContent);
- }
- $excel->writeSheet($data, $sheetName, $header, $styles);
- }
- ob_start();
- $excel->writeToStdOut();
- $output = ob_get_clean();
- return $output;
- }
- }
|