Conversion fichier excel vers csv avec php [Résolu/Fermé]

Signaler
Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
-
 jiji -
Bonjour,

Je suis entrain de préparer un script permettant de convertir les fichiers excel en csv mais ça ne marche pas! j'ai l'erreur suivante lorsque je le lance

Fatal error: Uncaught exception 'PHPExcel_Reader_Exception' with message 'Could not open ../public/mad/test_batch_solsys for reading! File does not exist.' in C:\wamp\www\chaima\speed-wear.net\web\batchs\Classes\PHPExcel\Reader\Excel5.php on line 443


voici le code ci dessous

require_once 'Classes/PHPExcel/IOFactory.php';

$inputFileType = 'Excel5';
$inputFileName = '../public/mad/test_batch_solsys.xls';

$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);

$loadedSheetNames = $objPHPExcelReader->getSheetNames();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');

foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
    $objWriter->setSheetIndex($sheetIndex);
    $objWriter->save($loadedSheetName.'.csv');
}



J'ai vérifié tous les chemins et les fichiers mais en vain

6 réponses

Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
3 215
Bonjour,

1 - Essayes autant que possible d'utiliser le chemin absolu en partant de la racine de ton site (donc depuis le www ) plutôt que des chemins relatifs.

2 - Vérifies les droits sur le répertoire où se trouve ton fichier.


Messages postés
2371
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
13 janvier 2021
438
Salut,

Pourtant il semble bien que le chemin vers le fichier xls soit incorrect.

D'après le message d'erreur, le fichier test_batch_solsys.xls serait situé dans le dossier C:\wamp\www\chaima\speed-wear.net\web\batchs\Classes\PHPExcel\public\mad\, est-ce le cas ?

Sinon essaye de renseigner le chemin absolu vers ce fichier.

Bonne journée
Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
Non parce que j'ai deux codes j'ai copié celui avec le mauvais chemin mais j'ai bien re vérifié ce n'est pas les chemins qui posent problème ici
Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
3 215
Non parce que j'ai deux codes j'ai copié celui avec le mauvais chemin mais j'ai bien re vérifié ce n'est pas les chemins qui posent problème ici

Dans ce cas, postes nous le code qui pose problème....

Et éventuellement... ajoutes y un petit test pour savoir si le fichier existe dans le chemin spécifié...
un truc du genre :

$fichier = "chemin_vers_ton_fichier/le_fichier.xls";
if( !file_exists($fichier)){
 echo "<br> Erreur : Fichier  $fichier introuvable";
}

Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
c'est le code en question :



/**
    Convert excel file to csv
*/
 
//Various excel formats supported by PHPExcel library
$excel_readers = array(
    'Excel5' , 
    'Excel2003XML' , 
    'Excel2007'
);
 
require_once('../batchs/Classes/PHPExcel.php');

 
$reader = PHPExcel_IOFactory::createReader('Excel5');
$reader->setReadDataOnly(true);
 
$path = '../test_batch_solsys.xls';
$excel = $reader->load($path);
 
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->save('../test_batch_solsys.xls');
 
echo 'File saved to csv format';





Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
3 215
Je vois toujours des chemins RELATIFS et non ABSOLUS dans ce que tu as écrit !!!!

Donc... si on considère que tu as, dans ton répertoire www un fichier nommé web .. le chemin absolu serait :

<?php
$DOC_ROOT = $_SERVER['DOCUMENT_ROOT'];
$DOC_ROOT = substr($DOC_ROOT, -1) == "/" ? $DOC_ROOT : $DOC_ROOT."/";


/**
    Convert excel file to csv
*/
 
//Various excel formats supported by PHPExcel library
$excel_readers = array(
    'Excel5' , 
    'Excel2003XML' , 
    'Excel2007'
);
$fichier =$DOC_ROOT.'web/test_batch_solsys.xlsx';;
if( !file_exists($fichier)){
 echo "<br> Erreur : Fichier  $fichier introuvable";
} 

require_once('../web/batchs/Classes/PHPExcel.php');

 
$reader = PHPExcel_IOFactory::createReader('Excel5');
$reader->setReadDataOnly(true);
 

$excel = $reader->load($fichier);
 
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->save($DOC_ROOT.'web/test_batch_solsys.csv');
 
echo 'File saved to csv format';

Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
Toujours pas ! je vais re tester et changer les chemins et je vous tiendrai au courant ! Merci quand mm
Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
Non toujours pas ! c'est toujours la même erreur qui concerne le chemin et c'est étrange j'ai changé mille et une fois le chemin
Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
3 215
Si ce n'est pas le chemin c'est que c'est sûrement l'autre partie du message d'erreur ... la possibilité de l'ouvrir en lecture...
Donc :
- Quels sont les droits sur le répertoire qui contient le fichier Excel à lire ?
- Aucun autre processus Excel ne tourne ? (ce qui pourrait bloquer le fichier)
- Tu as bien un chemin différent entre la lecture... et l'écriture en csv ? (car au début.. tu essayais d'écraser le fichier ouvert....) ?

- As tu essayé de redémarrer ton serveur pour voir si le souci persiste après ?
Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
mtn avec ce code je n'ai plus d'erreur mais ça marche pas !




echo("it works");
require_once('../batchs/Classes/PHPExcel.php');
convertXLStoCSV('../public/aixstream/stock.xls','../public/aixstream/stock.csv');

function convertXLStoCSV($infile,$outfile)
{
 $fileType = PHPExcel_IOFactory::identify($infile);
 $objReader = PHPExcel_IOFactory::createReader($fileType);
 $objReader->setReadDataOnly(true);
 $objPHPExcel = $objReader->load($infile);
 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'CSV');
 $objWriter->save($outfile);
}
echo("it works");
Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
3 215
Au niveau de ta page PHP, ajoute la ligne suivante :
error_reporting(E_ALL);


cela devrait te permettre de voir les éventuelles erreurs PHP.



Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
Bonjour, J'ai intégré cette ligne de code mais il ne m'affiche aucune erreur mais ça marche pas quand même !
Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
3 215
Bonjour,

Le code suivant fonctionne parfaitement :
<?php
//Afffichage des erreurs PHP
error_reporting(E_ALL);

$DOC_ROOT = $_SERVER['DOCUMENT_ROOT'];
$DOC_ROOT = substr($DOC_ROOT, -1) == "/" ? $DOC_ROOT : $DOC_ROOT."/";

//Mon site se trouve dans le www/web/
$DIR_SITE = $DOC_ROOT."web/";

$fichierIN = $DIR_SITE."Classeur1.xlsx";
$fichierOUT = $DIR_SITE."test_batch_solsys.csv";

// On importe PHPExcel
$phpXlFile = $DIR_SITE."/batchs/Classes/PHPExcel.php";
$phpXLfactory = $DIR_SITE."/batchs/Classes/PHPExcel/IOFactory.php";
if( !file_exists($phpXlFile)){
 echo "<br> Erreur : Fichier  $phpXlFile introuvable";
 exit();
} 
if( !file_exists($phpXLfactory)){
 echo "<br> Erreur : Fichier  $phpXLfactory introuvable";
 exit();
} 
require_once $phpXlFile;
require_once $phpXLfactory;


if( !file_exists($fichierIN)){
 echo "<br> Erreur : Fichier  $fichierIN introuvable";
 exit();
} 



try {
    $inputFileType = PHPExcel_IOFactory::identify($fichierIN);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($fichierIN);

		$objWriter = new PHPExcel_Writer_CSV($objPHPExcel);
		$objWriter->save($DOC_ROOT.'web/test_batch_solsys.csv');
		echo 'File saved to csv format';

} catch(Exception $e) {
    die('Error loading file "'.pathinfo($fichierIN,PATHINFO_BASENAME).'": '.$e->getMessage());
}



Par contre.. il faut bien penser à activer certaines extensions dans ton wamp :
php_zip
php_xml (et/ou php_xmlrpc )
php_gd2



Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
3 215
Un FTP ?? Oo ... à aucun moment tu ne nous a parlé de ça !!

Quoi qu'il en soit :
Tu lances ton script Comment ? Depuis ton navigateur ?

Peux tu faire le test en mettant les fichiers dans ton répertoire www ?
=> Qu'est-ce que ça donne ?

J'ai personnellement testé ce script sur mon Poste avec un WAMP ... et il fonctionne....
Donc.. si ça ne fonctionne pas chez toi.. c'est qu'il y a un autre souci.. qui ne me semble pas venir du code en lui-même...
Comme en plus tu passes par un FTP ... il se peut, comme je l'ai déjà demandé à plusieurs reprises...., qu'il s'agisse d'un souci de Droits D'accès aux fichiers !
Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
Oui je lance mon script depuis mon navigateur (644) pour l'accès!
Ok je vais l'essayer en local sous www
et je l'ai mis sous /web (dans l'FTP)
Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
Alors j'ai testé en local ! ça marche bien avec des fichier de type (.xlsx) mais pas les fichiers de type (.xls) any idea?
Messages postés
94
Date d'inscription
mercredi 17 juin 2015
Statut
Membre
Dernière intervention
3 septembre 2015
1
ça marche bien c'est bon c'est reglé pour l'xsl mais en FTP je n'ai pas su comment changer
ça rt j'ai vérifié l'acces tout est OK il me reste que ça et merci beaucoup encore une fois

$DOC_ROOT = $_SERVER['DOCUMENT_ROOT'];
$DOC_ROOT = substr($DOC_ROOT, -1) == "/" ? $DOC_ROOT : $DOC_ROOT."/";

//Mon site se trouve dans le www/web/
$DIR_SITE = $DOC_ROOT."web/";
bonjour, je n'ai pas compris ce que vous avez modifié pour que ça remarche car maintenant jai le même souci