IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> résolu : PHP foreach dans array, pour générer tableau Excel
Options
clarusad
posté 6 Mar 2019, 18:56
Message #1


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 270
Inscrit : 17 Oct 2006
Lieu : Strasbourg, France
Membre no 70 694



Salut,
Le but final est de générer un fichier Excel avec cette librairie : PHP_XLSXWriter.

Ça fonctionne très bien à la main :
Code
$data = array(
    array('year','month','amount'),
    array('2003','1','220'),
    array('2003','2','153.5'),
);

$writer = new XLSXWriter();
$writer->writeSheet($data);
$writer->writeToFile('output.xlsx');


Sauf que chez moi je dois remplir $data avec une variable qui contient un tableau. Jusque là tout va bien, puis que si je fais un print_r()
Code
print '<pre>';
print_r($montableau);
print '</pre>';

J'obtiens le résultat attendu :
Code
Array
(
    [0] => Array
        (
            [id] => 13
            [date] => 20191231235959
            [deleg] => 33
            [pren] => PRÉNOM
            [name] => NOM
            [mail] => [email protected]
            [fonc] => delegue_college_elus
            [stru] => STRUCTURE
            [vill] => VILLE
            [pouv] => 1
            [pouvnom] => PERSPOUV
            [pres] => 0
        )

    [1] => Array
        (
            [id] => 14
            [date] => 20191231235959
            [deleg] => 33
            [pren] => PRÉNOM
            [name] => NOM
            [mail] => [email protected]
            [fonc] => delegue_college_elus
            [stru] => STRUCTURE
            [vill] => VILLE
            [pouv] => 0
            [pouvnom] => PERSPOUV
            [pres] => 1
        )

)


Maintenant si je veux combiner les deux :
Code
$data = array(
    array(
        foreach( $result as $id => $ubtable ) {
            print $ubtable['date'];
            }
        ),
    );


Ça plante avec l'erreur suivante : «Parse error: syntax error, unexpected 'foreach' (T_FOREACH), expecting ')' in /Users/blabla... fichier machin ligne truc»

Une idée ?
Merci

Ce message a été modifié par clarusad - 7 Mar 2019, 18:11.
Go to the top of the page
 
+Quote Post
Philippe64
posté 6 Mar 2019, 19:00
Message #2


Adepte de Macbidouille
*

Groupe : Membres
Messages : 247
Inscrit : 31 Aug 2002
Lieu : Saint-Jean-de-Luz
Membre no 3 355



Pas trop le temps là, mais ton foreach à rien à faire dans ton array() …

Ce message a été modifié par Philippe64 - 6 Mar 2019, 19:01.


--------------------
En activité : Macbook pro 13" Core I5 à 2.5Ghz - Macbook pro 15" Core duo de 2006 qui marche toujours hyper bien - iPhone SE - iPad - iPad Mini
En Panne : Imac 27 Pouces Core I7 à 3.4Ghz - mid 2011 (je cherche un écran)
A la retraite : Imac C2D 24 Pouces (blanc) à 2.33 Ghz - iBook14" 800 Mhz - Quicksilver 733 - G3 bleu et blanc - Macintosh Classic - iPhone 3G - iPhone 4s

Crea64 : creation de site internet à Saint-Jean-de-Luz (64)
Go to the top of the page
 
+Quote Post
clarusad
posté 6 Mar 2019, 20:00
Message #3


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 270
Inscrit : 17 Oct 2006
Lieu : Strasbourg, France
Membre no 70 694



Ça progresse :
Code
$n=0;
foreach( $result as $id => $ubtable ) {
    $tab[$n][0] = $ubtable['date'];
    $n++;
    }


Ce message a été modifié par clarusad - 6 Mar 2019, 20:03.
Go to the top of the page
 
+Quote Post
Pixel44
posté 8 Mar 2019, 05:10
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 165
Inscrit : 17 Jul 2004
Lieu : Nantes
Membre no 21 109



Bonjour,

J'ai aussi essayé mais je me heurte à un autre problème : le fichier généré comporte des caractères "anti-XML" qui provoquent une erreur.
Je n'arrive à "voir" quels sont ces caractères que je dois remplacer dans ma chaine de caractères (issus d'une base ORACLE) afin que le fichier XLSX (XML) soit bien généré.

J'ai pensé à : ' , " / et \ que j'ai remplacé avec la fonction substr, mais je dois en oublier encore.

Merci pour vos conseils

Ce message a été modifié par Pixel44 - 8 Mar 2019, 05:10.


--------------------
Go to the top of the page
 
+Quote Post
baron
posté 8 Mar 2019, 05:43
Message #5


Macbidouilleur d'Or !
*****

Groupe : Modérateurs
Messages : 13 216
Inscrit : 22 Jul 2004
Lieu : Louvain-la-Neuve (Gaule Gelbique)
Membre no 21 291



As-tu essayé Google: Caractères interdits XML ?


--------------------
MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 4 Go/SSD Samsung 850EVO 500 Go – Mac OSX 10.6.8  Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 — + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C   Routeur/modem ADSL Trendnet TW100-BRM504 > B-Box 3 + HP LaserJet 4000 N  
La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même.
Les corsaires mettent en berne…
Go to the top of the page
 
+Quote Post
Pixel44
posté 8 Mar 2019, 05:43
Message #6


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 165
Inscrit : 17 Jul 2004
Lieu : Nantes
Membre no 21 109



pas encore...


--------------------
Go to the top of the page
 
+Quote Post
Philippe64
posté 8 Mar 2019, 09:30
Message #7


Adepte de Macbidouille
*

Groupe : Membres
Messages : 247
Inscrit : 31 Aug 2002
Lieu : Saint-Jean-de-Luz
Membre no 3 355



si avant de convertir tes données, il te faut traiter tes valeur pour qu'elles soient compatible XML.

du genre :

Code
$my_array = [……]; // Ton tableau de départ

$opt_array = []; // Ton futur tableau optimisé XML

foreach($my_array as $key=>$val) {

    $opt_array[$key] = strip_tags($val);

}


du coup $opt_array est une copie de ton tableau d'origine, mais sans html / xml dedans


--------------------
En activité : Macbook pro 13" Core I5 à 2.5Ghz - Macbook pro 15" Core duo de 2006 qui marche toujours hyper bien - iPhone SE - iPad - iPad Mini
En Panne : Imac 27 Pouces Core I7 à 3.4Ghz - mid 2011 (je cherche un écran)
A la retraite : Imac C2D 24 Pouces (blanc) à 2.33 Ghz - iBook14" 800 Mhz - Quicksilver 733 - G3 bleu et blanc - Macintosh Classic - iPhone 3G - iPhone 4s

Crea64 : creation de site internet à Saint-Jean-de-Luz (64)
Go to the top of the page
 
+Quote Post
Pixel44
posté 8 Mar 2019, 13:15
Message #8


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 165
Inscrit : 17 Jul 2004
Lieu : Nantes
Membre no 21 109



En fait ce sont les accents qui sont refusés


--------------------
Go to the top of the page
 
+Quote Post
Philippe64
posté 8 Mar 2019, 13:59
Message #9


Adepte de Macbidouille
*

Groupe : Membres
Messages : 247
Inscrit : 31 Aug 2002
Lieu : Saint-Jean-de-Luz
Membre no 3 355



Dans ce cas, c'est un problème d'encodage.
Il faut que tu te renseignes pour savoir quel encodage doit être utilisé avec le module de conversion excel. (UT8 ou autre)

Ensuite, tu vérifies quel encodage tu utilises dans ta base de données et tu te débrouilles pour convertir comme il faut.

par exemple, pour passer de ISO-8859-1 en UTF8 :
utf8_encode()
http://php.net/manual/fr/function.utf8-encode.php

et l'inverse :
utf8_decode()
http://php.net/manual/fr/function.utf8-decode.php

et tu peux reprendre le code que je t'ai déjà donné en exemple en remplaçant strip_tag par utf8_encode (ou utf8_decode)





--------------------
En activité : Macbook pro 13" Core I5 à 2.5Ghz - Macbook pro 15" Core duo de 2006 qui marche toujours hyper bien - iPhone SE - iPad - iPad Mini
En Panne : Imac 27 Pouces Core I7 à 3.4Ghz - mid 2011 (je cherche un écran)
A la retraite : Imac C2D 24 Pouces (blanc) à 2.33 Ghz - iBook14" 800 Mhz - Quicksilver 733 - G3 bleu et blanc - Macintosh Classic - iPhone 3G - iPhone 4s

Crea64 : creation de site internet à Saint-Jean-de-Luz (64)
Go to the top of the page
 
+Quote Post
Pixel44
posté 8 Mar 2019, 18:59
Message #10


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 165
Inscrit : 17 Jul 2004
Lieu : Nantes
Membre no 21 109



merci pour le coup de main : ce fut bien un problème d'encodage et tout fonctionne avec la fonction : utf8_encode


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 15th November 2019 - 12:27