Lecture d'un fichier excel de plus 200 lignes avec PHPExcel

ksomda Messages postés 36 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 2 septembre 2016 - Modifié par NHenry le 1/09/2016 à 19:44
ksomda Messages postés 36 Date d'inscription lundi 17 février 2014 Statut Membre Dernière intervention 2 septembre 2016 - 2 sept. 2016 à 19:19
Bonjour,
Je viens vers vous pour solliciter de l'aide.
Actuellement, j'importes un fichier excel contenant maximum 15 lignes avec une seule feuille de tableur. Cette importation marche.
Toutefois, j'ai constaté que avec les fichiers qui seront importés dans mon application contiendront plus de 200 lignes ce nombre est évolutif.
Aussi, avec la méthode de lecture avec PHPExcel que j'ai adopté, mon code php n'arrive pas à obtenir le nombre de lignes car le nombre de colonnes est fixe.
Veuillez trouvez ci - dessous le code de traitement pour les détails.
if (isset($_SESSION['user'])) {
        $compt = $_SESSION['user'];
        $idUsersconnectes = $compt['idUsers'];
        $cpt = "SELECT idUsers, nomUsers, prenomUsers, login, idGroupe FROM VUTILISATEUR WHERE supUsers='1' AND idUsers='$idUsersconnectes'";
        $results = $idcom->query($cpt);
        $row = $results->fetch(PDO::FETCH_ASSOC);
        $idUsers = $row['idUsers'];
        $nomUsers = strtoupper($row['nomUsers']);
        $prenomUsers = $row['prenomUsers'];
        $login = $row['login'];
        $user = $nomUsers . " " . $prenomUsers;
        setlocale(LC_TIME, 'fra_fra');
        $dateSaving = utf8_decode(utf8_encode(gmstrftime('%A %d %B %Y, %H:%M')));
        $target_galerie = "../ressources/upload/";
        $target_file = $target_galerie . basename($_FILES["fichier"]["name"]);
        if (!move_uploaded_file($_FILES["fichier"]["tmp_name"], $target_file)) {
            header("location: ../views/accueil.php?");
        }
        if ($target_file) {
            $fichiers = $_FILES["fichier"]["name"];
            if (file_exists($target_file)) {
                if ($_FILES["fichier"]["size"] > 0) {
                    include("../ressources/PHPExcel/Classes/PHPExcel/IOFactory.php");
                    $objReader = PHPExcel_IOFactory::createReader('Excel2007');
                    $objReader->setReadDataOnly(true);
                    $objPHPExcel = $objReader->load($target_file);
                    $objWorksheet = $objPHPExcel->getActiveSheet();
                    $highestRow = $objWorksheet->getHighestRow(); // e.g. 10 
                    for ($row = 5; $row <= $highestRow; $row++) {
                        $name0 = $objWorksheet->getCellByColumnAndRow(0, $row)->getValue();
                        $name1 = utf8_decode($objWorksheet->getCellByColumnAndRow(1, $row)->getValue());
                        $name2 = utf8_decode(PHPExcel_Style_NumberFormat::toFormattedString($objWorksheet->getCellByColumnAndRow(2, $row)->getValue(), 'YYYY-MM-DD'));
                        $name3 = utf8_decode($objWorksheet->getCellByColumnAndRow(3, $row)->getValue());
                        $name4 = utf8_decode($objWorksheet->getCellByColumnAndRow(4, $row)->getValue());
                        $name5 = utf8_decode($objWorksheet->getCellByColumnAndRow(5, $row)->getValue());
                        $name6 = utf8_decode($objWorksheet->getCellByColumnAndRow(6, $row)->getValue());
                        $name7 = utf8_decode($objWorksheet->getCellByColumnAndRow(7, $row)->getValue());
                        $name8 = utf8_decode($objWorksheet->getCellByColumnAndRow(8, $row)->getValue());
                        $name9 = utf8_decode(PHPExcel_Style_NumberFormat::toFormattedString($objWorksheet->getCellByColumnAndRow(9, $row)->getValue(), 'YYYY-MM-DD'));
                        $name10 = utf8_decode($objWorksheet->getCellByColumnAndRow(10, $row)->getValue());
                        $name11 = utf8_decode($objWorksheet->getCellByColumnAndRow(11, $row)->getValue());
                        $name12 = utf8_decode($objWorksheet->getCellByColumnAndRow(12, $row)->getValue());
                        $name13 = utf8_decode($objWorksheet->getCellByColumnAndRow(13, $row)->getValue());
                        $name14 = utf8_decode($objWorksheet->getCellByColumnAndRow(14, $row)->getValue());
                        $name15 = utf8_decode($objWorksheet->getCellByColumnAndRow(15, $row)->getValue());
                        $name16 = utf8_decode(PHPExcel_Style_NumberFormat::toFormattedString($objWorksheet->getCellByColumnAndRow(16, $row)->getValue(), 'YYYY-MM-DD'));
                        $name17 = utf8_decode(PHPExcel_Style_NumberFormat::toFormattedString($objWorksheet->getCellByColumnAndRow(17, $row)->getValue(), 'YYYY-MM-DD'));
                        $name18 = utf8_decode(PHPExcel_Style_NumberFormat::toFormattedString($objWorksheet->getCellByColumnAndRow(18, $row)->getValue(), 'YYYY-MM-DD'));
                        $name19 = utf8_decode(PHPExcel_Style_NumberFormat::toFormattedString($objWorksheet->getCellByColumnAndRow(19, $row)->getValue(), 'YYYY-MM-DD'));
                        $name20 = utf8_decode(strtoupper($objWorksheet->getCellByColumnAndRow(20, $row)->getValue()));
                        if ($name20 == "DEPOT1") {
                            $name21 = 2440003;
                        } elseif ($name20 == "DEPOT2") {
                            $name21 = 2440005;
                        } elseif ($name20 == "DEPOT3") {
                            $name21 = 2440008;
                        } elseif ($name20 == "DEPOT4") {
                            $name21 = 2440001;
                        }
                        $query = "INSERT INTO test (id, name1, name2, name3, name4, name5, name6, name7, 
                                      name8, name9, name10, name11, name12,name14, name15, name16, name17, name18, name19,
                                      name20, name21, volumeDeposeAuCompteur, idRespEnreg, dateRespEnreg, idRespDernierEnreg,
                                      dateRespDernierEnreg, sup)
                                      VALUES(NULL, '$name1', '$name2', '$name3', '$name4', '$name5', '$name6', '$name7', '$name8', '$name9', '$name10',
                                      '$name11', '$name12','$name14','$name15','$name16','$name17','$name18','$name19','$name20','$name21','NULL','$idUsers',
                                      '$dateSaving',NULL,NULL,'1')";
                        $result = $idcom->exec($query);
                    }
 
                    if ($result != 0) {
                        // Tout se passe bien,
                        header("location: ../views/test.php?op=2");
                    } else {
                        header("location: ../views/test.php?err=2");
                    }
                } else {
                    header("location: ../views/test.php?err=1");
                }
            } else {
// le fichier n'existe pas
                header("location: ../views/test.php?err=3");
            }
        }
    }


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
1 sept. 2016 à 22:20
Bonjour,

Je ne comprend pas ...
avec la méthode de lecture avec PHPExcel que j'ai adopté, mon code php n'arrive pas à obtenir le nombre de lignes car le nombre de colonnes est fixe

Quel est le rapport avec un nombre de colonne fixe... et le fait qu'il n'arrive pas à "obtenir" le nombre de lignes ???

As tu essayé de faire un echo de ta variable
$highestRow 
?
Qu'est-ce que ça t'affiche ??

De plus... ne serait-ce pas du au max_execution_time paramétré dans ton php.ini ?
Quelle est la taille du fichier excel (en méga) ?

Ensuite.. pourquoi faire des
 utf8_decode(utf8_encode
???
Pourquoi ne forces-tu pas, via le header, à dire que tu travailles en utf8 directement ?
Par exemple en utilisant :
header('Content-Type: text/html; charset=utf-8');


Puis.... le temps des tests.. retire les redirections pour que tu puisses voir les éventuels messages d'erreur s'afficher sur ta page ! (et remplaces les par des ECHO éventuellement)


et enfin.... vu que tu sembles travailler en PDO... je t'invite fortement à y activer la gestion des erreurs et à utiliser les requêtes préparées
voir ceci :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
http://www.commentcamarche.net/faq/27489-pdo-une-autre-facon-d-acceder-a-vos-bases-de-donnees

0
Rejoignez-nous