IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Traiter une base de données


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Traiter une base de données
    Hello ,

    Mon premier message sur le forum :p

    Je vous explique mon problème, je dois générer un fichier Excel de manière automatique, le fichier Excel contient de 15 000 à 50 000 lignes et 75 colonnes.

    Il s'obtient à l'aide d'une jointure et de calcul de formules sous Excel (68 formules Excel, il y a des SI, des SI ERREUR, des COUNTIF...).

    J'ai donc opté pour la librairie PHPExcel, ça fonctionne mais je dois attendre entre 1h15 et 1h30 pour que le fichier soit généré, pourtant j'ai réduit au maximum le nombre de boucles. Après avoir lu beaucoup de documentations, j'ai remarqué que c'est le problème de PHPExcel.

    Sinon je réfléchissais à la possibilité de créer un tableau php avec des array de toutes les formules Excel et les données extraites de ma base de données, une méthode qui prend beaucoup de temps et je ne suis pas sur que ça fonctionnera :s

    Je vous demande donc, est-ce qu'il existe une autre méthode ? Une méthode permettant de générer un classeur de type Excel avec énormément de données (1 voir 2 millions de cellules) et des formules assez rapidement (moins de 15 minutes).

    Merci par avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'est ce qui t'a orienté vers PHP pour faire ça ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Qu'est ce qui t'a orienté vers PHP pour faire ça ?
    Merci pour ta réponse

    En fait c'est une interface destiné à des utilisateurs lambdas. C'est pour cela qui je cherche à générer le document de cette manière, je cherche à créer une interface assez simple.

    Les utilisateurs complètent une base de données à partir d'importations d'Excel (Aucun problème de ce côté) et celle-ci permet de générer le fichier qui semble trop lourd pour PHPExcel...

  4. #4
    Membre averti
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Points : 373
    Points
    373
    Billets dans le blog
    1
    Par défaut
    bonjour !
    Je te conseille sans hésiter d'utiliser java avec la librairie POI !
    Si tu décides de partir dans cette direction et que tu peines à te lancer viens me demander
    Thomas Gredin.
    Développeur Unity 3D/VR

    Mon site personnel : http://thomasgredin.com/fr
    Mon portfolio : http://thomasgredin.com/fr/portfolio

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux aussi tout faire en VB ou VBA depuis le poste client.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour vos réponses

    smarlytomtom > Merci pour ta réponse, je vais essayer de rester en PHP pour l'instant si c'est possible.


    sabotage > Merci également pour ta réponse, tout est déjà prêt en VBA. J'ai effectué des recherches pour le faire tourner, il me semble que seul PHPExcel sait le faire (http://phpexcel.codeplex.com/workitem/19017). Mais je galère encore à comprendre la démarche
    Je n'arrive pas à le tester...
    PHPExcel me sort un fichier et je ne comprends pas vraiment comment on exécute la macro ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    75
    76
    77
    <?php
     
    ini_set("max_input_time","20000"); 
    ini_set("max_execution_time","20000");
     
     
     
    /** Error reporting */
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    date_default_timezone_set('Europe/London');
     
    if (PHP_SAPI == 'cli')
    	die('This example should only be run from a Web Browser');
     
    /** Include PHPExcel */
    require_once dirname(__FILE__) . '/Classes/PHPExcel.php';
    require_once dirname(__FILE__) .  '/Classes/PHPExcel/IOFactory.php';
     
    $path="templates/testing_macro.xlsm";
     
    $objPHPExcel = PHPExcel_IOFactory::load($path);
     
    $sheet = $objPHPExcel-> getActiveSheet();
     
    $rowCount =5;
     
    $worksheetTitle = $sheet->getTitle();
    $highestRow = $sheet->getHighestRow(); // e.g. 10
    $highestColumn = $sheet->getHighestColumn(); // e.g 'F'
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    $nrColumns = ord($highestColumn) - 64;
     
    	$sheet->setCellValue('B1', 'RetailerChannel');
    	$sheet->setCellValue('B2', 'filterby');
    	$sheet->setCellValue('B3', 'totalsite');
    	$sheet->setCellValue('B4', 'totalfires');
    	$sheet->setCellValue('B5', 'totaldevice');
     
    	$sheet = $objPHPExcel->getActiveSheet();
     
    	$baseRow = 3;
    	$i = 0;
    	$r = 0;
     
    	$sheet->insertNewRowBefore($baseRow,2);
     
    	for($a=6; $a<9; $a++){
    		$row = $baseRow + $a;
     
    		$b = 10 - $a; 
     
    		$sheet->setCellValue('A'.$row, '200'.$b)
    		->setCellValue('B'.$row, '400'.$b)
    		->setCellValue('C'.$row, '600'.$b)
    		->setCellValue('D'.$row, '800'.$b)
    		->setCellValue('E'.$row, '100'.$b)
    		->setCellValue('F'.$row, '300'.$b);
     
    	}
     
    	$sheet->removeRow($baseRow-1,1);
     
     
    echo date('H:i:s') , " Write to Excel2007 format" , PHP_EOL;
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save(str_replace('.php', '.xlsx', __FILE__));
    echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsm', __FILE__) , PHP_EOL;
    // Echo memory peak usage
    echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
     
    // Echo done
    echo date('H:i:s') , " Done writing file" , PHP_EOL;
     
    exit;
    ?>
    Encore merci pour vos réponses

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quand je parlais de VB/VBA je voulais dire "à la place de PHPExcel" pour la génération du fichier final.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre averti
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Points : 373
    Points
    373
    Billets dans le blog
    1
    Par défaut
    Ou si tu préfères utiliser un langage qui ne dépend pas d'excel je te conseil VBScript qui permet de manipuler les feuilles Excel presque de la même façon qu'en VBA ! je m'en sert actuellement pour mon travail et ça marche plutôt bien !
    Thomas Gredin.
    Développeur Unity 3D/VR

    Mon site personnel : http://thomasgredin.com/fr
    Mon portfolio : http://thomasgredin.com/fr/portfolio

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    VB dépend d'Excel. La seul différence avec VBA c'est que VBA se lance depuis Excel même.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre averti
    Avatar de smarlytomtom
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2014
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Points : 373
    Points
    373
    Billets dans le blog
    1
    Par défaut
    VBA se sert d'excel comme Host pour s'exécuter ! Quand je dis que VBScript ne dépend pas d'Excel, je veux dire qu'il ne s'exécute pas par le biais du Host Excel mais par celui du Microsoft script Host ce qui permet à mon gout une plus grande flexibilité ! de plus le VBScript peut très bien être présent dans un squelette HTML mais attention seulement sur un serveur tournant avec Asp (il me semble, à confirmer !) Ce qui peut être un désavantage, mais si tu veux seulement une appli en local tout roule
    Thomas Gredin.
    Développeur Unity 3D/VR

    Mon site personnel : http://thomasgredin.com/fr
    Mon portfolio : http://thomasgredin.com/fr/portfolio

Discussions similaires

  1. Quels logiciels de modélisation pour une base de données ?
    Par octopus dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 11/06/2023, 16h20
  2. Réponses: 4
    Dernier message: 08/09/2009, 17h07
  3. [Strategie][Java][XML] Import dans une base de données
    Par nad dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/09/2002, 11h12
  4. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo