Upload et modification fichier excel via PHP

Bonjour tout le monde,

Je suis un peu en galère la.
L'idée c'est que j'ai un fichier excel avec une colonne A et une colonne B, je voudrais pouvoir uploader ce fichier, et le modifier de facon a obtenir une troisieme colonne A+B, puis l'enregistrer la ou je veux.
La partie upload ne pose pas de problemes, c'est jsute que je n'ai pas la moindre idée de comment modifier le fichier Excel avec PHP.

Merci pour votre aide.
Configuration: Windows XP
Firefox 1.0.3

21 réponses

  1. Me revoila, pour vous tenir un peu au courant de mon avancement, et donner des pistes à certains .
    J'ai chopé la librairie excelWriter, qui permet de créer un fichier Excel avec PHP. J'ai réussi à le modifier de facon à ce que je puisse ouvrir un fichier déja existant. Voila le code:
    <?php
    
    set_time_limit(10);
    
    require_once "excelWriter/class.writeexcel_workbook.inc.php";
    require_once "excelWriter/class.writeexcel_worksheet.inc.php";
    
    $var= 'tut.xls';
    
    	
    	$workbook =& new writeexcel_workbook(fopen($var,"r+")) or die ("Error");
    	$worksheet =& $workbook->addworksheet("Tut 1") or die ("Error 2");
    	
    	//$book=$excel->Workbooks(1) ;
    	//$sheet=$book->Worksheets(1) ;
    	# The general syntax is write($row, $column, $token). Note that row and
    	# column are zero indexed
    	#
    	
    	# Write some text
    	$worksheet->write(2, 0,  "Meuhhh !");
    	$worksheet->write(2 ,1,  "Pouet");
    	$worksheet->write(2, 2,  "Plop");
    
    	$workbook->close();
    
    	header("Content-Type: application/x-msexcel; name=\"example-simple.xls\"");
    	header("Content-Disposition: inline; filename=\"example-simple.xls\"");
    	$fh=fopen($fname, "rb");
    	fpassthru($fh);
    	unlink($fname);
    	
    	
    
    ?>


    Ca ouvre le fichier tut.xls, et y écrit 3 mots dans 3 cases différentes. Le problème c'est qu'avec ce code, on ouvre un fichier existant, mais on crée une nouvelle feuille (addworksheet), qui écrase les feuilles existantes. En clair j en'arrive pas encore a ajouter des donées sans effacer les anciennes.

    Donc si qqn sait comment écrire dans une feuille déja existante sans en créer une, ça m'interesse grandement !
    1. Tu as trouvez la solution car moi je ne la trouve pas
      Merci d'avance

      A+
  2. J'aimerai te dire que y'a un intérêt, mais je n'en vois pas :d

    Pour l'instant j'arrive à créer un fichier Excel avec PHP, et écrire des trucs dedans, mais impossible de modifier un fichier existant. VOila le code qui fonctionne et qui me permet de créer un fichier excel en php:
    // On définie une constante FILENAME comprenant le nom du fichier à générer et son emplacement. 
    define("FILENAME","C:/mon_repertoire/fichier.xls"); 
    
    $excel=new COM("Excel.application"); //Instanciation de l'objet COM 
    $excel->sheetsinnewworkbook=1;//1 seule feuille de calcul dans le document 
    $excel->Workbooks->Add();//Ajout d'un classeur 
    $book=$excel->Workbooks(1);//$book contient le classeur actif 
    $sheet=$book->Worksheets(1);//$sheet contient la feuille active (comme son nom l'indique, feuille en anglais) 
    $sheet->Name="Nom de votre feuille";//Attribution d'un nom à la feuille 
    
    $cell=$sheet->Range('B1'); // On sélectionne la case B1 
    $cell->value="tut";  
    
    $book->saveas(FILENAME);//Sauvegarde du fichier 
    unset($sheet);//Libération de $sheet 
    unset($book);//Libération de $book 
    $excel->Workbooks->Close();//Fermeture du classeur 
    $excel->Quit();//On quitte Excel 
    unset($excel);//Libération de l'instance $excel 
    
    


    J'ai chopé ça la https://openclassrooms.com/fr/courses

    Ce bout de code créé un fichier et écrit "tut" dans la case B1.
    Apparement c'est du VBA remixé façon php, donc je vais tester
    $excel=Workbooks->Open FILENAME;
    pour tenter d'ouvrir un fichier deja existant.
    1. fopen() permet d'ouvrir ton fichier, mais cela n'ouvre pas Excel. toi tu dois utiliser cette commande.

      Pourquoi ne pas faire cela directement dans Excel ? Excele permet de faire cela, sinon je n'ai pas compris l'intéret de Excel ...

      En attente de te lire en retour,

      2berte
      1. J'ai pas de code à te donner, j'ai fait tellement d'essais que c'est un bordel monstre au niveau du code, ca serait illisible. xD

        Si fopen() n'ouvre pas physiquement, quelle est la commande pour ouvrir physiquement un fichier ?
        1. Donne ton code entier si tu veux un coup de main...

          non ça t'ouvre le fichier en lecture. Mais il ne s'ouvre pas physiquement, c'est pour cela que tu vois pas le bloc notes s'ouvrir...

          2berte
          1. Donne ton code entier si tu veux un coup de main...

            non ça t'ouvre le fichier en lecture. Mais il ne s'ouvre pas physiquement, c'est pour cela que tu vois pas le bloc notes s'ouvrir...

            2berte
            1. C'est un peu le bordel :p
              Je vais me faire taper sur les doigts par le patron lol.
              Juste pour info, si je fais
              fopen ("fichier.txt",r
              ) , c'est censé ouvrir le fichier non ? Je veux dire, ca ouvre le bloc note pour qu'on puisse lire non ?
              1. Effectivement, j'ai mis "r+" au lieu de "w", ca n'ecrase plus le fichier.
                J'ai chopé une libraire qui apparement permettrait décrire et de lire un fichier Excel, je vais tenter de comprendre comment cela fonctionne !
                1. le 'w' signifie que tu ouvres ton fichier en écriture, or toi tu dois l'ouvrir en lecture et écriture ... Cherche sur cette piste là ...

                  Bon courage

                  2berte
                  1. Rectification, ca écrase le fichier existant, c'est donc un bon début, au moins il se passe quelque chose sur mon fichier Excel :D
                    1. Merci pour le lien.

                      A partir de ce lien, j'ai tenté de simplement ouvrir le fichier Excel uploadé, voila mon code:

                      $file = ($_FILES['fichier']['name'] ) ; // le fichier doit dj exister
                      	fopen($file, "w" ) or die ("marche pas"); //on ouvre le fichier


                      Evidemment ca ne fonctionne pas, il ne se passe rien, sinon ça ne serait pas drôle ;)
                      Donc si qqn voit ou ca foire...

                      Merci d'avance
                      1. Bah si tu connais que PHP, non je ne vois pas d'autres solutions...

                        Un petit lien qui permet d'ouvrir ton fichier ".xls" et d'écrire dans une case : http://www.infos-du-net.com/forum/264042-21-creer-fichier-excel .

                        C'est peut être un bout de piste.

                        En attente de te lire en retour,

                        2berte
                        1. Parceque je ne connais que le php pour le moment :/
                          Tu vois une solution simple ? je veux dire autre que php ?
                          1. C'est obligatoirement un fichier Excel (.xls) ? Cela ne peut pas être un fichier de type csv ?

                            Lire un fichier CSV, je sais faire. Ecrire un nouveau fichier ça doit être possible.

                            Quel est l'intéret de cette manip ? Peux tu nous expliquer davantages stp .

                            En attente de te lire en retour,

                            2berte
                            • 1
                            • 2