IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Génération depuis un fichier type


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Alternance
    Inscrit en
    Juin 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Alternance
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2013
    Messages : 21
    Par défaut Génération depuis un fichier type
    Lecteurs,

    Après quelques semaine de recherches je m'en remet a vous !

    Avant de vous exposer mon problème je vais vous expliquer la situation actuel.
    J'ai eu a développer un module pour mon intranet un outil afin de générer des tableaux de ce style:
    Nom : Sans titre.JPG
Affichages : 223
Taille : 18,6 Ko

    Ces tableaux sont a transmettre a des partenaires de la société.

    Pour cela le moyen actuel est une édition manuel d'un fichier .docx .

    Je souhaiterais utiliser un fichier de base .docx comme "template", et y insérer mes tableaux.

    Ne trouvant pas de solution pour lire le fichier type, puis créer mon tableau et enfin de faire une restitution, j'ai décidé de passer a un autre format, le .odt . De la même façon je peine énormement a trouver ce que je veux faire.

    J'ai pas mal de contrainte:
    - Le nombre de tableaux varies
    - La structure des tableaux varies
    - Je suis sur un serveur mutualisé il y a donc des librairie que je ne peu pas utilisé ( j'ai eu des soucis de droit d’accès ... ).

    C'est après avoir cherché désespérément pendant plus de 3 semaines, que je m'en remet a vous.

    Dans l'attente d'une réponse ...

    Cordialement

    bplus

  2. #2
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Déjà je comprends pas pourquoi tu ne fais pas un fichier excel si ce sont que des tableaux, ce sera à la fois beaucoup plus simple pour toi à générer et ensuite également plus simple pour les utilisateurs à l'exploiter non ?

  3. #3
    Membre averti
    Homme Profil pro
    Alternance
    Inscrit en
    Juin 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Alternance
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2013
    Messages : 21
    Par défaut
    Bonjour Spartacusply et merci de ta réponse !

    En fait ces tableaux sont noyés dans une quantité de donnée texte, voici quelques pages du fichiers en question:

    Nom : Sans titre.JPG
Affichages : 213
Taille : 113,9 Ko


    En gros le principe est le suivant:

    Un utilisateur lambda créer un fichier word avec la présentation associé, il y ajoute des balise tel que #NOM# #TELEPHONE# #MOIS# #ANNEE# #TABLEAUX# , il upload ce fichier sur le serveur, je me sert de ce fichier comme template, j'y insères les données, puis je le propose en téléchargement afin que l'utilisateur puisse diffuser le document au différents partenaires de la société.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux utiliser PHPWord.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Alternance
    Inscrit en
    Juin 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Alternance
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2013
    Messages : 21
    Par défaut
    Merci sabotage !

    Je viens de creuser la documentation de PhpWord et effectivement j'était passé a coté de la partie template ...

    Je vais creuser en ce sens.

    Je vous tiens très rapidement au courant de mon évolution.

    Amicalement

    bplus

  6. #6
    Membre averti
    Homme Profil pro
    Alternance
    Inscrit en
    Juin 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Alternance
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2013
    Messages : 21
    Par défaut
    De retour !

    Effectivement PHPWord est bon pour le template, mais il est très mauvais pour la génération d'un tableau sur un template. En effet les objets sections sont inutilisable sur PHPWord lorsqu'on charge un template.

    Voici un exemple de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $PHPWord = new PHPWord();
    		$document = $PHPWord->loadTemplate('../modele/modele.docx');
    		$document->setValue('ANNEE', $year);
    		$document->setValue('NUMERO', $numero);
    		$document->setValue('ADRESSEAGENCE', $adresse);
    		$document->setValue('NUMEROAGENCE', $numero);
    		$document->setValue('FAXAGENCE', $fax);
    		$document->setValue('MAILAGENCE', $email);
    Il fait du "string replace" pure et durement.

    Du coup j'ai du utilisé un système D pour faire mes tableau: les écrire en WordML dans une string, puis utiliser la fonction setValue. J'arrive a peu pret a faire ce que je souhaite, sauf 2 détails ...

    1) Changer la police d'écriture dans le tableau
    2) Jouer avec les bordure du tableau.

    Voici le code en "vrac" de mes tableau généré:

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    table .= '<w:tbl><w:tblPr>';
    			$table .= '<w:tblStyle w:val="Grilledutableau"/>';
    			$table .= '<w:tblBorders>'; 
    				$table .= '<w:top w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:left w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:bottom w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0 w:color="auto"/>';
    				$table .= '<w:right w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:insideH w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:insideV w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    			$table .= '</w:tblBorders>';
    		$table .= '<w:jc w:val="center"/></w:tblPr>';
    		$table .= '<w:tblGrid>';
    			$table .= '<w:gridCol w:w="10296"/>';
    		$table .= '</w:tblGrid>';
     
    			$table .= '<w:tr><w:trPr><w:trHeight w:val="680"/></w:trPr>';
    				$table .='<w:tc><w:tcPr>';
    				$table .='<w:tcBorders><w:bottom w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/></w:tcBorders>';
    				$table .='</w:tcPr><w:p><w:r><w:t>';
    				$table .="</w:t></w:r></w:p></w:tc>";
    				$table .='<w:tc><w:tcPr><w:vAlign w:val="center"/><w:gridSpan w:val="3"/></w:tcPr><w:p><w:pPr><w:jc w:val="center"/></w:pPr><w:r><w:rPr><w:b/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>Taux Fixes</w:t></w:r></w:p></w:tc>';
    			$table .= "</w:tr>";
     
    		    $table .= "<w:tr>"; // ligne 
    			    $table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr>'; // celule
    			    	$table .= '<w:p><w:r><w:rPr><w:b/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>'.$libelle.'</w:t></w:r></w:p>';
    					$table .= '<w:p><w:r><w:rPr><w:b/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>Revenu couple : '.$symbole_couple.' '.$revenu_couple.' /AN</w:t></w:r></w:p>';
    					$table .= '<w:p><w:r><w:rPr><w:b/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>Revenu seul : '.$symbole_seul.' '.$revenu_seul.' /AN</w:t></w:r></w:p>';
    			    $table .= "</w:tc>";
     
     
     
    		    $table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr><w:p><w:r><w:rPr><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr><w:t>'; // celule
    		    	$table .= utf8_decode ("DUREE (années)");
    		    $table .= "</w:t></w:r></w:p></w:tc>";
     
    		    $table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr><w:p><w:r><w:rPr><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr><w:t>'; // celule
    		    	$table .= "Taux";
    		    $table .= "</w:t></w:r></w:p></w:tc>";
     
    		    $table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr>'; // celule
    		    	$table .= utf8_decode ('<w:p><w:r><w:rPr><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr><w:t>Mensualité pour 10 000 </w:t></w:r></w:p><w:p><w:r><w:rPr><w:b/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr><w:t>empruntés (hors assurance)</w:t></w:r></w:p>');
    		    $table .= "</w:tc>";
     
    		    $table .= "</w:tr>";
     
     
    			$bareme = 'TAUX FIXES <br><br> </th>';
     
    			$sql_array = sprintf("SELECT 
    						*
    					FROM 
    						banque_bareme_duree
    					");
    			$rows_array = mysql_query($sql_array);
    			$i = 0;
    			$total = mysql_num_rows($rows_array);
    			while($row_array = mysql_fetch_assoc($rows_array)){
    				$duree = $row_array['duree'];
     
    				$table .= '<w:tr><w:trPr><w:trHeight w:val="454"/></w:trPr>'; // ligne 
     
    						$table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr><w:p><w:pPr><w:jc w:val="center"/></w:pPr><w:r><w:t>'; // celule
    					    	$table .= "";
    					    $table .= "</w:t></w:r></w:p></w:tc>";
     
     
    					$table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr><w:p><w:pPr><w:jc w:val="center"/></w:pPr><w:r><w:t>'; // celule
    				    	$table .= $duree;
    				    $table .= "</w:t></w:r></w:p></w:tc>";
     
     
    					$table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr><w:p><w:pPr><w:jc w:val="center"/></w:pPr><w:r><w:t>'; // celule
    				    	$table .= $arrayTaux[$duree]." %";
    				    $table .= "</w:t></w:r></w:p></w:tc>";
     
    					$table .= '<w:tc><w:tcPr><w:vAlign w:val="center"/></w:tcPr><w:p><w:pPr><w:jc w:val="center"/></w:pPr><w:r><w:t>'; // celule
    				    	$table .= $arrayMensualite[$duree];
    				    $table .= "</w:t></w:r></w:p></w:tc>";
    				$table .= "</w:tr>";
     
     
    				$i++;
     
    			} 
    			$table .= '<w:tr><w:trPr><w:trHeight w:val="680"/><w:vAlign w:val="center"/></w:trPr>';
    				$table .="<w:tc><w:p><w:r><w:t>";
    				$table .="</w:t></w:r></w:p></w:tc>";
    			$table .= "</w:tr>";
    			$table .= '</w:tbl>';
    		}
     
    	}
    	//On a fini
    	// 
    	$style ='</w:style><w:style w:type="table" w:styleId="Grilledutableau"><w:name w:val="Table Grid"/><wx:uiName wx:val="Grille du tableau"/><w:basedOn w:val="TableauNormal"/><w:rsid w:val="00632FA0"/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblBorders><w:top w:val="single" w:sz="4" wx:tbdrwidth="10" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/></w:tblBorders><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style>';
    	$font = '</w:font><w:font w:name="Calibri"><w:panose-1 w:val="020F0502020204030204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="E10002FF" w:usb-1="4000ACFF" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/></w:font>';
     
    	/******   end dynamic table  ****/
    	$document->setValue('BAREMES',$table);
    De nombreuses documentations sur le net indique de placer ceci entre deux balises "<w:tblPr>":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $table .= '<w:tblBorders>'; 
    				$table .= '<w:top w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:left w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:bottom w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0 w:color="auto"/>';
    				$table .= '<w:right w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:insideH w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    				$table .= '<w:insideV w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/>';
    			$table .= '</w:tblBorders>';
    Puis de jouer directement sur les bordures des cellules ( a placer entre deux "<w:tcPr>"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $table .='<w:tcBorders><w:bottom w:val="double" w:sz="4" wx:bdrwidth="30" w:space="0" w:color="auto"/></w:tcBorders>';
    Seulement quand je génère mon fichier ( sans les bordures du tableau ), j'ai un bon résultat:
    Nom : Sans titre.JPG
Affichages : 220
Taille : 67,0 Ko

    Mais quand j'y ajoute mes bordure, le fichier XML semble périmé et j'ai ce joli message d'erreur:
    Nom : Sans titre.JPG
Affichages : 216
Taille : 6,9 Ko

    Auriez-vous une idée ce la marche a suivre afin de faire mes bordures ?

    Bien cordialement

    Bplus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Génération code Java depuis des fichiers IDL
    Par Lolitaaa dans le forum CORBA
    Réponses: 1
    Dernier message: 17/11/2009, 10h52
  2. Génération automatique de fichier xml d'une BDD depuis code java ?
    Par zuzuu dans le forum Persistance des données
    Réponses: 0
    Dernier message: 11/03/2009, 09h09
  3. Executer un fichier type .bat depuis un navigateur.
    Par marcandre dans le forum Langage
    Réponses: 5
    Dernier message: 16/01/2009, 16h46
  4. [MySQL] Affichage Fichier JOINT (depuis table MySQL type BLOB) header content
    Par encore_php dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/04/2008, 16h57
  5. Réponses: 2
    Dernier message: 24/03/2007, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo