Bonjour,

Je découvre PHPexcel, du moins pour la mise en forme des cellules.
Je dois créer un fichier Excel avec les données de ma base de données.

J'arrive déjà à créer le fichier avec une mise en forme des colonnes et lignes, mais je coince sur la mise en forme des cellules : couleur de font, police, alignement, ...

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
<?php
include('./../../connect_sql.php');
// -------------------- Création du fichier Excel
	set_time_limit(30);
 
	// ----- référence à la bibliothèque de fonctions
	require_once 'PHPExcel.php';
	require_once './PHPExcel/IOFactory.php';
 
	// ----- création des objets de base et initialisation des informations d'entête
	$classeur = new PHPExcel;
	$classeur->getProperties()->setCreator("CECSDB");
	$classeur->setActiveSheetIndex(0);
	$feuille=$classeur->getActiveSheet();
 
	// ----- Mise en forme de cellules et texte
	$feuille->getColumnDimension('A')->setWidth(33);
	$feuille->getColumnDimension('B')->setWidth(8);
	$feuille->getColumnDimension('C')->setWidth(6);
	$feuille->getColumnDimension('D')->setWidth(33);
	$feuille->getColumnDimension('E')->setWidth(8);
 
	// ----- Ajout des données dans la feuille de calcul
	$feuille->setTitle('Tarifs bar');
 
	$feuille->mergeCells('A1:E1');
	$feuille->setCellValueByColumnAndRow(0, 1,  'Tarifs bar');
	$feuille->setCellValueByColumnAndRow(0, 2,  '');
	$row=2;
	$coll=0;
 
// -------------------- Lecture de la db
	$categorie_article='non';
	$reponse_produit=mysqli_query($conn_cecs, "SELECT type_nom, prod_prix_mbr, stock_bar_type_nom, tva.data_tva_taux AS tauxTvaVente
	FROM 07_stock_produit prod 
		INNER JOIN 07_stock_type type ON prod.id_type_prod=type.id_type 
		INNER JOIN 01_data_tva tva ON prod.id_tva_prod=tva.data_tva_id 
		INNER JOIN 01_data_tva tva2 ON prod.id_tva_achat_prod=tva2.data_tva_id 
		INNER JOIN 07_stock_bar_type cat ON prod.prod_bar_cat=cat.stock_bar_type_id 
	WHERE id_cat_prod='009' && prod_actif='oui' && prod_prix_mbr>0
	ORDER BY stock_bar_type_id, type_nom	")  or die(mysqli_error($conn_cecs));
	while ($in= mysqli_fetch_array($reponse_produit)) {
		$article_nom=$in['type_nom'];
		$article_htva=$in['prod_prix_mbr'];
		$article_tva=$in['tauxTvaVente'];
		$article_cat=$in['stock_bar_type_nom'];
 
		$article_nom_afficher=str_replace('_',' ',$article_nom);
		$article_tvac=sprintf("%.2f",$article_htva*(1+($article_tva/100)));
 
		$coll ++;
 
		if ($categorie_article!=$article_cat) {
			if ($coll==2) { $row ++; $feuille->getRowDimension($row)->setRowHeight(6); }
			else { $feuille->getRowDimension($row)->setRowHeight(6); }
			$row ++;
			$feuille->mergeCells('A'.$row.':E'.$row);
			$feuille->setCellValueByColumnAndRow(0, $row,  $article_cat);
			$row ++;
			$feuille->getRowDimension($row)->setRowHeight(6);
			$feuille->setCellValueByColumnAndRow(0, $row,  '');
			$categorie_article=$article_cat;
			$row ++;
			$coll=0;
		}
 
		if ($coll==1) {
			$feuille->setCellValueByColumnAndRow(0, $row,  $article_nom_afficher);
			$feuille->setCellValueByColumnAndRow(1, $row,  $article_tvac.' €');
		}
		if ($coll==2) {
			$feuille->setCellValueByColumnAndRow(3, $row,  $article_nom_afficher);
			$feuille->setCellValueByColumnAndRow(4, $row,  $article_tvac.' €');
			$coll=0;
			$row ++;
		}
	}
 
    // ----- envoi du fichier au navigateur
    header('content-type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="Tarifs.xls"'); 
    header('Cache-Control: max-age=0'); 
    $writer = PHPExcel_IOFactory::createWriter($classeur, 'Excel5'); 
 
    $writer->save('php://output');
    mysqli_close($conn_cecs);
 
?>
Voici le résultat obtenu :

Nom : resultat.PNG
Affichages : 474
Taille : 17,7 Ko

Voici ce que je souhaite faire :

Nom : souhait.PNG
Affichages : 441
Taille : 19,5 Ko

J'ai essayé d'utiliser une fonction pour la ligne en noir, mais l'appel ne fonctionne pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
// ----- La fonction
function cellColor($cells,$color){
    global $objPHPExcel;
 
    $objPHPExcel->getActiveSheet()->getStyle($cells)->getFill()->applyFromArray(array(
        'type' => PHPExcel_Style_Fill::FILL_SOLID,
        'startcolor' => array(
             'rgb' => $color
        )
    ));
}
 
// ----- Appel de la fonction
$feuille->mergeCells('A'.$row.':E'.$row);
cellColor('A'.$row, '000000'); // ----- entre la ligne 57 et 58 ci-dessus
$feuille->setCellValueByColumnAndRow(0, $row,  $article_cat);
Je dois encore centré dans les cellules fusionnées, grandeur de la police et couleur de la police ... mais comme cela ne fonctionne pas, je n'ai pas continué.

La ligne 1 doit aussi être mise en forme : border, centré, grandeur police.

Tous le sheet peut être en gras.

Une aide serait la bienvenue.

@+
DDAWEB