Excel.class.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. require_once (__DIR__.SLASH.'..'.SLASH.'constant.php');
  3. require_once (LIB_PATH.'XLSXWriter'.SLASH.'XLSXWriter.class.php');
  4. require_once (LIB_PATH.'SimpleXLSX'.SLASH.'SimpleXLSX.class.php');
  5. class Excel
  6. {
  7. //Parse un fichier xlsx et retourne le contenu
  8. public static function parse($xlsxFile) {
  9. return SimpleXLSX::parse($xlsxFile);
  10. }
  11. /**
  12. * Retourne le contenu d'un tableau convertit au format XLSX
  13. * @param array $rows le tableau avec les lignes à exporter dans le fichier
  14. * @param array $mapping le mapping qui permet d'ajouter des libellé en fct des clés de colonne
  15. * Structure du tableau de mapping attendu : aaray(
  16. * 'Label' => 'clé',
  17. * 'Autre label' => 'autre clé',
  18. * etc...
  19. * );
  20. * @param string $sheetname le nom à donner à la feuille de calcul courante
  21. * @return string le stream du fichier généré
  22. */
  23. public static function exportArray($rows, $mapping, $sheetname='Classeur 1'){
  24. $data = $header = array();
  25. $style = array(
  26. 'border' => 'top,left,bottom,right',
  27. 'border-style' => 'thin'
  28. );
  29. if(empty($mapping) && isset($rows[0])){
  30. foreach($rows[0] as $key=>$value){
  31. $mapping[$key] = $key;
  32. }
  33. }
  34. foreach ($rows as $key => $item) {
  35. $itemContent = array();
  36. if (isset($mapping)) {
  37. foreach ($mapping as $label => $slug) {
  38. $header[$label] = 'string';
  39. isset($item[$slug]) ? array_push($itemContent, $item[$slug]) : array_push($itemContent, '');
  40. }
  41. } else {
  42. foreach ($item as $field => $value) {
  43. array_push($itemContent, $item[$field]);
  44. }
  45. }
  46. array_push($data, $itemContent);
  47. }
  48. ob_start();
  49. $excel = new XLSXWriter();
  50. $excel->writeSheetHeader($sheetname, $header, array_merge($style, array('font-style'=> 'bold','border-color' => '#2a2a28')));
  51. foreach($data as $row)
  52. $excel->writeSheetRow($sheetname, $row, array_merge($style, array('border-color' => '#cecece')));
  53. $excel->writeToStdOut();
  54. $output = ob_get_clean();
  55. return $output;
  56. }
  57. /**
  58. * Export de données sur plusieurs feuilles Excel
  59. * @param array $content [Contenu à exporter]
  60. * Format du tableau de contenu attendu :
  61. * array(
  62. * 'Classeur 1' => array(
  63. * 'mapping' => array(
  64. * 'Libellé' => 'slug',
  65. * 'Libellé' => 'slug',
  66. * 'Libellé' => 'slug'
  67. * ),
  68. * 'rows' => array(
  69. * 0 => objet/entité exporté,
  70. * 1 => objet/entité exporté,
  71. * 2 => objet/entité exporté
  72. * )
  73. * ),
  74. * 'Classeur 2' => array(
  75. * 'mapping' => array(
  76. * 'Libellé' => 'slug',
  77. * 'Libellé' => 'slug',
  78. * 'Libellé' => 'slug'
  79. * ),
  80. * 'rows' => array(
  81. * 0 => objet/entité exporté,
  82. * 1 => objet/entité exporté,
  83. * 2 => objet/entité exporté
  84. * )
  85. * ), etc...
  86. * );
  87. * On place généralement $response['rows'] dans l'index 'rows' d'une feuille Excel
  88. *
  89. * @param string $filename [Nom du fichier à exporter]
  90. *
  91. * @return string [Fichier XSLX]
  92. */
  93. public static function exportMultipleSheets($content){
  94. $commonStyle = array('border'=> 'top,left,bottom,right', 'border-style'=> 'thin');
  95. $headerStyle = array_merge($commonStyle, array('font-style'=> 'bold','border-color'=> '#2a2a28'));
  96. $contentStyle = array_merge($commonStyle, array('border-color'=> '#cecece'));
  97. $styles = array(
  98. 'header' => $headerStyle,
  99. 'content'=> $contentStyle
  100. );
  101. $excel = new XLSXWriter();
  102. foreach ($content as $sheetName => $sheetContent) {
  103. $data = $header = array();
  104. foreach ($sheetContent['rows'] as $key => $item) {
  105. $itemContent = array();
  106. if (isset($sheetContent['mapping'])) {
  107. foreach ($sheetContent['mapping'] as $label => $slug) {
  108. $header[$label] = 'string';
  109. isset($item[$slug]) ? array_push($itemContent, $item[$slug]) : array_push($itemContent, '');
  110. }
  111. } else {
  112. foreach ($item as $field => $value) {
  113. array_push($itemContent, $item[$field]);
  114. }
  115. }
  116. array_push($data, $itemContent);
  117. }
  118. $excel->writeSheet($data, $sheetName, $header, $styles);
  119. }
  120. ob_start();
  121. $excel->writeToStdOut();
  122. $output = ob_get_clean();
  123. return $output;
  124. }
  125. }