Copie d'une sheet d'un fichier dans la sheet d'un autre fichier xlsx!

Eléphant du PHP | 54 Messages

07 déc. 2017, 11:19

Bonjour voilà j'ai mon code qui lorsqu'il arrive sur un certain fichier nommé 201705031017, crée un nouveau fichiers excel. Cela fonctionne or je souhaiterai qu'il copie le contenu du fichier 201705031017 dans le nouveau fichier!
Comment faire ?
Voici mon code:

Code : Tout sélectionner

<h1>Tri excel</h1> <main> <?php $dossier=""; $nb_fichier=0; //Scan du dossier Fichier_excel if($dossier = opendir('./Fichiers_excel')) { while(false !== ($fichier = readdir($dossier))) { // le count inclut toujours le dossier actuel et le dossier parent d'où ce test avec le . et le .. if($fichier != '.' && $fichier != '..') { //$file2 = substr(pathinfo($fichier, PATHINFO_FILENAME), 1); $nb_fichier++; //echo '<li><a href="./csv/' . $fichier . '">' . $fichier . '</a></li>'; } } //echo $nb_fichier; echo '</ul><br />'; $ok=1; closedir($dossier); } else { echo 'Le dossier n\' a pas pu être ouvert'; } $cpt=0; if($ok==1) { echo "<div id=\"rslt\">"; if($nb_fichier<1) { echo 'Il n\'y a aucun fichier dans le dossier'; } else { echo 'Il y a <strong>&nbsp;' . $nb_fichier . '&nbsp;</strong> fichier(s) dans le dossier<br>'; echo "</div>"; //On utilise la bibliothéque Excel require_once('./Lib_excel/Classes/PHPExcel.php'); set_time_limit(2500); if($dossier = opendir('./Fichiers_excel')) { while(false !== ($fichier = readdir($dossier))) { //echo $fichier; if($fichier != '.' && $fichier != '..') { try { $inputFileType = PHPExcel_IOFactory::identify("./Fichiers_excel/".$fichier); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load("./Fichiers_excel/".$fichier); $sheet = $objPHPExcel->getActiveSheet() ; } catch(Exception $e) { die('<br>Error loading file "'.pathinfo($fichier,PATHINFO_BASENAME).'": '.$e->getMessage()); } $file = substr(pathinfo($fichier, PATHINFO_FILENAME), 0); //echo $file2; if($file==201705031017) { //Création d'un nouveau fichier Excel //Fichier nécessaire à la génération du tableur include './Lib_excel/Classes/PHPExcel/Writer/Excel2007.php'; //Instanciation du nouveau projet Excel $workbook = new PHPExcel; //Activation de la feuille de travail (celle par défaut) $sheet_rslt = $workbook->getActiveSheet(); //Copie des données du premier fichier ouvert $sheet1 = $sheet->copy(); $sheet_rslt = clone $sheet1; //Instanciation d'un objet writer spécifique au type de tableau que nous voulons générer $writer = new PHPExcel_Writer_Excel2007($workbook); //On donne un nom au fichier et on l'enregistre $records = './Fichiers_excel/Fichier_final.xlsx'; $writer->save($records); echo "first<br>"; } else { if($file<=201707181524) { //echo "moins<br>"; $cpt++; } else { //echo "plus<br>"; $cpt++; if ($cpt==1208) break; } unset($sheet); $objPHPExcel->disconnectWorksheets(); unset($objPHPExcel); //unlink("./Fichiers_excel/".$fichier); supprimes les fichiers! //Workbooks($fichier).Close ; } } } closedir($dossier); echo $cpt; } else { echo 'Le dossier n\' a pas pu être ouvert'; } } } ?> </main>
J'ai bien essayé avec les sheet->copy ou les clone sheet mais cela ne fonctionne pas! Or dans l’exemple dans la librairie de EPHPExcel ils utilisent bien un clone.
Merci d'avance

Eléphant du PHP | 54 Messages

07 déc. 2017, 11:49

J'ai modifié un petit peu afin de tester avec la commande copy de l'aide php.

Code : Tout sélectionner

if($dossier = opendir('./Fichiers_excel')) { while(false !== ($fichier = readdir($dossier))) { //echo $fichier; if($fichier != '.' && $fichier != '..') { try { $inputFileType = PHPExcel_IOFactory::identify("./Fichiers_excel/".$fichier); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load("./Fichiers_excel/".$fichier); $sheet = $objPHPExcel->getActiveSheet() ; } catch(Exception $e) { die('<br>Error loading file "'.pathinfo($fichier,PATHINFO_BASENAME).'": '.$e->getMessage()); } $file = substr(pathinfo($fichier, PATHINFO_FILENAME), 0); //echo $file2; if($file==201705031017) { //Création d'un nouveau fichier Excel //Fichier nécessaire à la génération du tableur include './Lib_excel/Classes/PHPExcel/Writer/Excel2007.php'; //Instanciation du nouveau projet Excel $workbook = new PHPExcel; //Activation de la feuille de travail (celle par défaut) $sheet_rslt = $workbook->getActiveSheet(); //Copie des données du premier fichier ouvert if(!copy($fichier, $workbook)) { echo "Echec de la copie dans le nouveau fichier"; } //Instanciation d'un objet writer spécifique au type de tableau que nous voulons générer $writer = new PHPExcel_Writer_Excel2007($workbook); //On donne un nom au fichier et on l'enregistre $records = './Fichiers_excel/Fichier_final.xlsx'; $writer->save($records); echo "first<br>"; } else { if($file<=201707181524) { //echo "moins<br>"; $cpt++; } else { //echo "plus<br>"; $cpt++; if ($cpt==1208) break; } unset($sheet); $objPHPExcel->disconnectWorksheets(); unset($objPHPExcel); //unlink("./Fichiers_excel/".$fichier); supprimes les fichiers! //Workbooks($fichier).Close ; } } } closedir($dossier); echo $cpt; } else { echo 'Le dossier n\' a pas pu être ouvert'; } }
Donc dans mon code je crée d'abord le nouveau fichier, ensuite je souhaite faire la copie dedans et enfin j'enregistre le fichier sous le nom de fichier_final.
Voici l'erreur que j'ai :

Code : Tout sélectionner

Warning: copy() expects parameter 2 to be a valid path, object given in C:\wamp64\www\Tri_excel\View\view.php on line 79 Call Stack # Time Memory Function Location 1 0.0010 233496 {main}( ) ...\index.php:0 2 0.0110 253768 require( 'C:\wamp64\www\Tri_excel\View\view.php' ) ...\index.php:10 3 0.2100 6584648 copy ( ) ...\view.php:79

Eléphant du PHP | 54 Messages

07 déc. 2017, 11:51

En y mettant les liens complet:

Code : Tout sélectionner

//Copie des données du premier fichier ouvert if(!copy('./Fichiers_excel/'.$fichier, './Fichiers_excel/'.$workbook)) { echo "Echec de la copie dans le nouveau fichier"; }
J'ai ce message d'erreur:

Code : Tout sélectionner

Catchable fatal error: Object of class PHPExcel could not be converted to string in C:\wamp64\www\Tri_excel\View\view.php on line 79 Call Stack # Time Memory Function Location 1 0.0010 233496 {main}( ) ...\index.php:0 2 0.0110 254008 require( 'C:\wamp64\www\Tri_excel\View\view.php' ) ...\index.php:10