Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Bureautique
Bureautique Forum d'entraide sur la gestion dynamique de documents de bureautique (Word, Excel, OpenOffice...) avec PHP. Avant de poster -> Cours Excel, FAQ OpenXML, FAQ OpenDocument
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2006, 13h02   #1
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Par défaut Importation / Exportation de fichier excel avec PHP

Bonjour,

J'aimerais importer un fichier excel dans une base de données MySQL avec PHP pour pouvoir l'afficher et la modifier.
Et ensuite pouvoir exporter toute les données ainsi modifier dans un fichier excel.

Je sais qu'il existe des tonnes de tutoriaux, mais c'est justement peut être trop ...
La méthode la plus simple pour importer un fichier excel est de le sauvegarder en cvs ou xml et ensuite de l'importer, mais j'aimerais me passer de manipulation, il ne faut pas trop en demander à mes utilisateurs ...

Le fichier de base qui servira à l'importation/exportation est un fichier .xls d'origine Excel 2000.
Est il possible d'importer/exporter un fichier de ce type sans manipulation sur le fichier ?
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2006, 13h57   #2
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 88
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : juin 2006
Messages : 88
Points : 27
Points : 27
tu entend sans le modifier, tu n'a qu'un fichier ou tu en a plusieur?? une méthode que j'ai fait moi (surmenent pas la meilleur)
C'est en perl, en php je ne sais pas faire

Code :
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
# !usr/perl/bin/
# Modules nécessaires
use strict;
 
#use warnings;
use Win32::OLE qw(in with);
use CGI::Carp qw(fatalsToBrowser);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;
use DBI;
$| = 1;
use Cwd;
 
# database information
my $db="##TA BASE##";
my $host="localhost";
my $userid="root";
my $passwd="";
my $connectionInfo="dbi:mysql:$db;$host";
 
# make connection to database
my $dbh = DBI->connect($connectionInfo,$userid,$passwd) or die"Couldn't connect to DB" . DBI->errstr;;
 
# Création d'une nouvelle instance du package pour Excel
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');
my $dir = cwd;
#on cherche tout les fichier XLS du dossier courant
my @Listexls = <*.xls>;
foreach my $scalar (@Listexls)
      {
      # Ouverture du fichier Excel à importer
      my $Book = $Excel->Workbooks->Open("$dir/$scalar");
      # Affectation du 1er classeur à la variable $Sheet
      my $Sheet = $Book->Worksheets(1);
      my $line= 2;
my $toto=0;
      my $col = 1;
      my $cel;
      my $sth;
  my $query = "INSERT into publi (`ident` , `numero` , `type` , `pt` , `au` , `ca` , `ti` , `so` , `se` , `bs` , `ed` , `la` , `dt` , `ce` , `sc` , `de` , `id` , `ab` , `c1` , `rp` , `em` , `pu` , `pi` , `pa` , `wp` , `sn` , `bn` , `j9` , `ji` , `py` , `pd` , `vl` , `is` , `pn` , `su` , `si` , `bp` , `ep` , `ar` , `pg` , `ga` , `ut`)
                  VALUES (";
 
          while($Sheet->Cells($line,'A')->{'Value'}){
              my $var = $Sheet->Cells($line,$col)->{'Value'};
 
              if ($var =~ /CCC:/){# Si l'élément de la case excel contient CCC alors dernière info on fini la requête
                    $query .="'$var')";
 
                    $line++;
                    $col = 1;
                    #print "$query\n";
 
                    print "$toto\n";
                    $toto++;
 
                    $sth = $dbh->prepare($query); # et on l'envoi
                    $sth->execute;
# puis on réinitialise
                    $query = "INSERT into publi (`ident` , `numero` , `type` , `pt` , `au` , `ca` , `ti` , `so` , `se` , `bs` , `ed` , `la` , `dt` , `ce` , `sc` , `de` , `id` , `ab` , `c1` , `rp` , `em` , `pu` , `pi` , `pa` , `wp` , `sn` , `bn` , `j9` , `ji` , `py` , `pd` , `vl` , `is` , `pn` , `su` , `si` , `bp` , `ep` , `ar` , `pg` , `ga` , `ut`) VALUES (";
 
		  }
              elsif($var){                        #sinon si valeur alors on la glisse dans la requête
                  $var =~ s/\'/ /g;
                  $query .="'$var',";
                  $col++;
              }
              else{					#sinon on mais '' dans la reqête
                   $query .="'',";
                   $col++;
              }
          }
 #   }
close $Book;
}

Dit moi si il ya un truc que tu ne comprend pas
lanfeust42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2006, 12h26   #3
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Des personnes ont besoin de donner un dossier à une personnes.
Le site servira au départ à exporter ces fichiers pour les archivers, puis au final à ce passer totalement des fichiers excel.

Je test de suite cette solution.
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 15h59   #4
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 88
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : juin 2006
Messages : 88
Points : 27
Points : 27
hum pour l'export je crois que mysql a un composant pour le fairte je suis pas sur a 100%
lanfeust42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 14h50   #5
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Bon, un poil trop compliqué pour moi ta solution.
Par contre je viens de découvrir l'exportation de phpmyadmin que tu m'a signalé en CSV.

On peut exporter une base de données mysql vers un fichier CSV qui s'ouvre avec excel.

Malheureusement, je ne sais pas comment faire pour ajouter des onglets dans ma fichier excel, ni "embellir" le fichier excel.
Par embellir j'entend tracer des tableau, mettre de la couleur.

Car un feuille remli de donnée ce n'est pas lisible.
Si je ne trouve pas, je devrait tout mettre dans un fichier excel au lieu d'une base de données MySQL. Je suis parti pour ...
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 14h57   #6
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
Regarde par ici cela devrait t'etre utile.
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2006, 10h16   #7
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Wooot! C'est parfait pour l'exportation php => xls !
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2006, 11h29   #8
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Pour l'importation, le csv est apparament la seule solution.
Donc je suis obligé d'enregistré le fichier en csv et de l'importer avec un script php ...
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2006, 11h51   #9
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
Tu as la classe pour lire aussi ici. Je l'ai jamais utilisé, mais si ca se trouve ca te sera utile.
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2006, 15h30   #10
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Ta classe fonctionne, en fait ca crée un csv à partir du fichier excel.
Ca revien au même, mais ca évite de faire la manip de l'exportation en csv, ce qui est très bien pour les utilisateurs lambda.

Donc pour résumé.
Exportation avec le couleurs et toute la mise en forme.
Importation de excel vers csv
Importation de csv
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2006, 10h14   #11
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Importation / Exportation de fichier excel avec PHP


Le code !

J'utilise cette classe http://sourceforge.net/docman/displa...group_id=99160

Pour chacun des fichiers, j'enregistre des paramètres, la table MySQL associés au fichier, le nombre de colonne du fichier à enregistrer et à qu'elle ligne on débute l'enregistrement.
Dommage que l'utilitaire de coloration php ne mette pas en couleur le code html ...

Citation:
<h2>Administration des importations des fichiers excel</h2>
<?php
// Inclusion de la classe pour l'exportation excel => CSV
require_once 'include/classe/excel/reader.php';

// Définition des colonnes à prendre en compte pour chacun des fichiers
$Carac_fichier = array(      'inv_utilisateur.xls' =>       array ('nom_bdd' => 'inv_utilisateur',       'nbr_col' => '8',      'nbr_depart' => 2),
                                    
'inv_print.xls' =>                   array ('nom_bdd' => 'inv_print',             'nbr_col' => '6',      'nbr_depart' => 2),
                                    
'inv_switch.xls' =>             array ('nom_bdd' => 'inv_switch',             'nbr_col' => '6',      'nbr_depart' => 2),
                                    
'inv_licenece.xls' =>      array ('nom_bdd' => 'inv_licence',             'nbr_col' => '6',      'nbr_depart' => 2),
                                    
'inv_pc.xls' =>                   array ('nom_bdd' => 'inv_pc',                   'nbr_col' => '65',      'nbr_depart' => 2)
                                    );

if (!isset(
$_POST['fichiers']) )      $fichiers[] = "";
else                                                
$fichiers[] = $_POST['fichiers'];
if (!isset(
$_POST['sendadd']) )            $sendadd = "";
else                                                
$sendadd = $_POST['sendadd'];

$chemin = 'fichier/excel/';            // Répertoire contenant les fichiers
$sql = '';                                    // Initialisation de la requête SQL.
?>      


<form method="post" action="" enctype="multipart/form-data" />
      <strong>Fichiers : &nbsp;</strong>      <input type="file" name="fichiers[]" size="70" />
      <input type="submit" name="submit" value="Envoyer" /><input type="hidden" name="sendadd" value="ok"><br /><br />
      Vous pouvez importer les fichiers
      <?php       foreach($Carac_fichier as $cle=>$valeur) echo '<strong>' .$cle.'</strong>,&nbsp;&nbsp;'; ?>
</form>
<?php
if ($fichiers != "" && $sendadd == "ok")
{

      
// Upload du fichier sur le serveur
      // ==================================================================================

            // Enregistrement des noms de fichiers envoyés et temporaire
            
$nom_du_fichiers = $_FILES['fichiers']['name'][0];
            
$nom_du_fichiers_temporaire = $_FILES['fichiers']['tmp_name'][0];
      
            
//Now it's OK, upload !
            
if (@copy($nom_du_fichiers_temporaire, $chemin.$nom_du_fichiers))      // $chemin
            
{
                  echo
"Upload réussi du fichier : <strong>" .$nom_du_fichiers. "</strong>.<br />";

                  
// Conversion du fichier sur le serveur
                  // ==================================================================================
            
                        // ExcelFile($filename, $encoding);
                        
$data = new Spreadsheet_Excel_Reader();
                        
// Set output Encoding.
                        
$data->setOutputEncoding('CP1251');
                        
$data->read($chemin.$nom_du_fichiers);
                        
                        
// Teste de l'existance du fichier dans le tableau $Carac_fichier
                        
if ( isset($Carac_fichier[$nom_du_fichiers]) )
                        {
                              
                              echo
"<br /><br /><strong>Début de la lecture du fichier excel ligne par ligne ... </strong><br /><br />";
                              
                              
// Enregistrement du nombre de colonne à afficher
                              
$nom_bdd = $Carac_fichier[$nom_du_fichiers]['nom_bdd'];
                              
$nbr_col = $Carac_fichier[$nom_du_fichiers]['nbr_col'];
                              
$nbr_depart = $Carac_fichier[$nom_du_fichiers]['nbr_depart'];
                              
                              
// Parcours du fichier excel
                              
error_reporting(E_ALL ^ E_NOTICE);
                              for (
$i = $nbr_depart; $i <= $data->sheets[0]['numRows']; $i++)
                              {
                                    
$sql = "INSERT INTO `" .$nom_bdd. "` VALUES ( '', ";
                                    for (
$j = 1; $j <= $nbr_col; $j++)
                                    {
                                          if (
$j != $nbr_col )
                                                
$sql .= "'" .$data->sheets[0]['cells'][$i][$j]. "',";
                                          else
                                                
$sql .= "'" .$data->sheets[0]['cells'][$i][$j]. "');";            //echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
                                    
}
                                    echo
$sql . "<br />";
                                    
$db_s->query($sql);
                              }
                              
                              echo
"<br /><strong> ... Fin de la lecture du fichier</strong>";
                        }
                        else
                              
$erreur = "Le fichier n'est pas référencé.";
            }
            else
                  
$erreur = "Echec de l'upload du fichier <strong>!</strong>";
            
            echo
'<br /><span class="text_alert">' .$erreur. '</span><br />';
                  
            
//Si le fichier temporaire n'a pas été effacé par le serveur
            
if (is_file($nom_du_fichiers_temporaire))
                  @
unlink($nom_du_fichiers_temporaire);
}
?>
Colorez votre code PHP sur les forums grâce à Developpez.com
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2009, 11h06   #12
Invité de passage
 
Inscription : février 2009
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 11
Points : 2
Points : 2
Par défaut Importation / Exportation de fichier excel avec PHP

salut Space Cowboy,
j'avais le même problème que vous et j'ai essayé votre code et il m'a affiché ce message d'erreur : Call to a member function on a non-object in....line 74
donc cette ligne : $db_s->query($sql);
svp je suis en galère et je n'arrive pas à importer des données dans ma table à partir de fichers excel.
merci pour votre aide.
chaffar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h19.


 
 
 
 
Partenaires

Hébergement Web