Automatisation de bases de données

Automatisation de bases de données - Divers - Programmation

Marsh Posté le 20-04-2017 à 09:22:22    

Bonjour,
 
Mon projet est de traiter différents fichiers Excel. Pour cela, j’aimerais créer un seul fichier contenant certaines données des fichiers précédents. Tout ceci afin d’avoir ma base de données. Le but est ainsi par la suite d’obtenir des graphiques issus de ces données et de pouvoir les diffuser. Après de nombreuses recherches sur internet (PHP,Python,.. ?), je ne trouve pas la meilleure méthode a utilisé. Un peu d’aide serait la bienvenue.
 
Cordialement.

Reply

Marsh Posté le 20-04-2017 à 09:22:22   

Reply

Marsh Posté le 20-04-2017 à 15:55:19    

C'est un peu vague, ce que tu veux faire.
Soit il y a besoin des manipuler les donnes via une IHM (lecture/ajout/MAJ/suppr) auquel cas, une appli web avec une BD genre MySql ou Postgres et du PHP pour le côté serveur et du HTML/CSS/JS pour l'iHM côté client (navigateur web) fera l'affaire.
Soit tu as juste des traitements de type stats/agrégations/extracts à effectuer, auquel cas un outil de type ETL conviendrait (Pentaho, par ex).
 
Edit : ETL = Extract, Transform and Load


Message édité par rufo le 20-04-2017 à 15:55:44

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-04-2017 à 17:49:58    

Bonjour,
 
Peut-être que ça vous intéressera.
C'est la page sur sourceforge du projet Excel Writter : http://excel-writer.sourceforge.net/
J'écris avec Ada.

Reply

Marsh Posté le 20-04-2017 à 17:57:57    

Si tu es dans le cas de plusieurs fichiers qui arrives de façon régulière, une fois par jour par exemple, regarde les solutions proposé par Rufo.
 
Si c'est simplement manipuler en one shot plusieurs fichiers pour les fusionner, il n'y a pas forcement de solution meilleure qu'une autre.
Un script Python fera certainement l'affaire.
 
Si tu es dans le second cas peux-tu expliquer ce qu'il y a dans les excels ? que des valeurs ? du texte ? plusieurs onglets ?  
Et que veux tu comme fichiers finale ?
 
Tor


---------------
"La valeur d'un homme tient dans sa capacité à donner et non dans sa capacité à recevoir." Albert Einstein / "Dans la nature, tout a toujours une raison. Si tu comprends cette raison, tu n'as plus besoin de l'expérience." Léonard De Vinci
Reply

Marsh Posté le 20-04-2017 à 19:27:40    

Après, il reste toujours ue solution à base d'une macro Excel en VBA, voire, si besoin d'un peu plus de manips, d'une combinaison d'un script/exe en AutoIt + une macro en VBA.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-04-2017 à 21:06:10    

Au final on veut une application web donc je pense que la première solution de rufo est celle qui faut. Vaut-il mieux utiliser PHP ou Python?  :)
 
Les données changent une fois par an. Elles sont composées pour chaque fichier de chiffres relatives à des communes et on doit sélectionner seulement celles d'un certain département.


Message édité par jen00 le 20-04-2017 à 21:09:32
Reply

Marsh Posté le 20-04-2017 à 22:56:18    

Le dév d'une appli web est peut-être surdimensionné si c'est pour faire un traitement par an :??:
Est-ce qu'il y aurait moyen d'avoir une vue d'ensemble du besoin ? Nb d'utilisateurs, nb de traitements à faire et leur fréquence, volumétrie des données. Car là, j'aurais plutôt tendance à proposer du Pentaho voire un simple petit script php de manipulation de données.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-04-2017 à 07:28:45    

Cela vise près de 500 utilisateurs, il y a des milliers de données. Le fichier final sera composé de près de 800 variables pour 500 lignes de données


Message édité par jen00 le 21-04-2017 à 09:14:44
Reply

Marsh Posté le 21-04-2017 à 10:32:34    

Ok, donc clairement, tu oublies Excel et il te faut un outil qui puisse importer les données dans un SGBD (Mysql, Postgres ou autre) et une IHM (web a priori, c'est le plus simple pour le déploiement sur pleins de postes utilisateurs) permettant aux utilisateurs de manipuler et effectuer les traitements.
PHP est un bon langage pour faire ça. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-04-2017 à 10:34:05    

Je travaille avec PostGIS. Je ne connais pas PHP mais Python, est ce réalisable avec?

Reply

Marsh Posté le 21-04-2017 à 10:34:05   

Reply

Marsh Posté le 21-04-2017 à 11:46:36    

Tout ce que tu peux faire avec PHP, tu peux le faire avec python.
 
Il faut juste paramétrer le serveur HTTP, mais c'est pas bien compliqué.


---------------
sheep++
Reply

Marsh Posté le 21-04-2017 à 13:31:19    

Très bien merci de ton aide. Je vais commencé à programmer

Reply

Marsh Posté le 21-04-2017 à 14:38:19    

Avant de plonger dans le dév, fais un peu de conception pour préparer le terrain et avoir une archi qui tient la route. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-04-2017 à 14:47:35    

C'est à dire? :) Désolé je suis une novice..

Reply

Marsh Posté le 21-04-2017 à 15:33:37    

Avant de coder, il faut définir les spécifications du logiciel le plus détaillé possible (en gros, les fonctions disponibles dans le logiciel, qui y a accès, les données que les fonctions ont en entrée et ce qu'elles donnent en sortie, la structure de la BD, c'est-à-dire son MCD, et MLP...) puis faire la conception du logiciel (en gros, comment tu organises ton code, si tu es en objet, quelles sont tes classes et les méthodes de chaque classe et pour chaque méthode, ce qu'elle prend en paramètres d'entrée et ce qu'elle donne en sortie comme résultat...).
 
Seulement après ça, tu peux commencer à coder. A titre d'info, la phase de spéc/conception, c'est au moins 1/3 du temps du projet. Le code, c'est 20 à 30% du temps. Le reste est du test/validation.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-04-2017 à 14:35:07    

J'ai essayé de programmer afin de créer la base de données mais je n'arrive pas à sortir le fichier Excel.. J'aimerais aussi le convertir en fichier CSV
 
import os
import xlrd
import xlsxwriter
from xlrd import open_workbook
 
wc = xlrd.open_workbook("S:\\...\\table-appartenance-geo-communes-16.xls" )
sheet0=wc.sheet_by_index(0)
 
# création  
bdd = xlsxwriter.Workbook('S:\\...\\Department.xlsx')
dept = bdd.add_worksheet('deprt')
 
folder_path = "S:\\...\\2013_telechargement2016"
 
constante=1
constante2=1
 
# ajout des entêtes
 
dept.write_row(0,0,sheet0.cell(5, 0).value)
dept.write(0,1,sheet0.cell(5, 4).value)
dept.write(0,2,sheet0.cell(5, 7).value)
dept.write(0,3,sheet0.cell(5, 8).value)
dept.write(0,4,sheet0.cell(5, 9).value)
dept.write(0,5,sheet0.cell(5, 12).value)
dept.write(0,6,sheet0.cell(5, 15).value)
 
# ajout des donnees
 
for ligne in range(15000,sheet0.nrows - 1):
 if sheet0.cell_value(ligne, 2) == '61':
  dept.write(constante2,0,sheet0.cell(ligne, 0).value)
  dept.write(constante2,1,sheet0.cell(ligne, 4).value)
  dept.write(constante2,2,sheet0.cell(ligne, 7).value)
  dept.write(constante2,3,sheet0.cell(ligne, 8).value)
  dept.write(constante2,4,sheet0.cell(ligne, 9).value)
  dept.write(constante2,5,sheet0.cell(ligne, 12).value)
  dept.write(constante2,6,sheet0.cell(ligne, 15).value)
  constante2=constante2+1
 
# recherche dans le dossier
 
col=7
lastCol=0
for path, dirs, files in os.walk(folder_path):
    for filename in files:
        filename = os.path.join(path, filename)  
        wb = xlrd.open_workbook(filename, '.xls')
        sheet1 = wb.sheet_by_index(0)
        lastRow=sheet1.nrows
        lastCol=sheet1.ncols
        for ligne in range(0,lastRow):
                for col2 in range(0,lastCol):
                        if sheet1.cell_value(ligne, col2) == 'DEP':
                                colDep=col2
                                firstRow=ligne
        for nCol in range(colDep+2,lastCol-1):
                print(nCol,sheet1.cell(firstRow, nCol).value)
                dept.write(0,col+nCol,sheet1.cell(firstRow, nCol).value)
        for ligne in range(0,lastRow):
                if sheet1.cell(ligne, colDep).value=='61':
                       for coll in range(col,lastCol-1):
                               dept.write(constante,coll,sheet1.cell(ligne, col).value)
                               constante=constante+1
        col=lastCol
 
bdd.close

Message cité 1 fois
Message édité par jen00 le 27-04-2017 à 14:39:36
Reply

Marsh Posté le 27-04-2017 à 14:47:55    

jen00 a écrit :

J'ai essayé de programmer afin de créer la base de données mais je n'arrive pas à sortir le fichier Excel..


Qu'est ce qui se passe? Quel est le symptôme? Un erreur?
 

jen00 a écrit :

J'aimerais aussi le convertir en fichier CSV


Un CSV c'est pas bien compliqué:
- Chaque ligne du fichier représente un ligne
- Le cases de chaque lignes sont séparées par des virgules
 
Mais laisse ça de côté pour l'instant, un problème à la fois.


---------------
sheep++
Reply

Marsh Posté le 27-04-2017 à 14:55:01    

h3bus a écrit :


Qu'est ce qui se passe? Quel est le symptôme? Un erreur?
 


 
Le programme se termine sans erreur mais le fichier n'apparait nul part à la fin. Au début, je suis passé par le module xlrd pour créer le fichier cela marchait il apparaissait. Mais comme le nombre de colonnes est limité à 255, j'ai dû changé. Cela ne génère plus de fichier..


Message édité par jen00 le 27-04-2017 à 14:57:12
Reply

Marsh Posté le 27-04-2017 à 15:13:25    

Il manque des parenthèses pour bdd.close()


---------------
sheep++
Reply

Marsh Posté le 27-04-2017 à 15:30:19    

On est bien d'accord qu'un fichier Excel n'est pas une base de données (ou alors, la BD du pauvre de chez pauvre, puisque dans la suite MS Office, tu as Access qui est un début de BD) :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-04-2017 à 15:58:52    

rufo a écrit :

On est bien d'accord qu'un fichier Excel n'est pas une base de données


De ce que j'ai compris il ne veut pas vraiment une BDD, mais plutôt centraliser des données éparses dans un fichier excel pour générer des graphiques.


---------------
sheep++
Reply

Marsh Posté le 27-04-2017 à 16:00:36    

Ce que je fais là va servir à la fin pour insérer le fichier dans Postgre.
 
J'ai maintenant mon fichier merci.


Message édité par jen00 le 27-04-2017 à 16:08:19
Reply

Marsh Posté le 27-04-2017 à 16:28:29    

Ok, tu me rassures ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-04-2017 à 08:47:09    

Comment est-il possible de réduire le temps d'exécution de mon programme (environ 5 min actuellement) ?

Reply

Marsh Posté le 28-04-2017 à 10:30:54    

Tu peux désactiver les options de recalcul automatique par ex plus 2-3 autres options du même genre.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-04-2017 à 13:59:21    

Je ne vois pas des calculs que je puisse enlever, j'ai besoin de tous les avoir..


Message édité par jen00 le 28-04-2017 à 14:05:42
Reply

Marsh Posté le 28-04-2017 à 14:11:47    

Pour optimiser:
- Enlève ton print
- ... ne pas travailler sur un fichier excel, malheureusement c'est très lent.


---------------
sheep++
Reply

Marsh Posté le 28-04-2017 à 14:15:42    

h3bus a écrit :

Pour optimiser:
- Enlève ton print
- ... ne pas travailler sur un fichier excel, malheureusement c'est très lent.


 
C'est fait merci. Quelle serait la solution alors autre qu'un fichier excel?

Reply

Marsh Posté le 28-04-2017 à 23:32:01    

Une BD (dans un SGBD genre Postgres, Mysql...), comme préconisé depuis le début :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-05-2017 à 10:01:54    

Afin d'optimiser, est ce qu'il est possible de commencer par scanner les lignes à partir du moment où les numéro du département commence par un 6?

Reply

Marsh Posté le 02-05-2017 à 15:48:14    

Tout est possible à faire comme traitement ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-05-2017 à 16:22:36    

J'ai essayé mais cela rallonge mon traitement. J'ai peut être pas utilisé la bonne manière..

Reply

Marsh Posté le 02-05-2017 à 17:45:41    

C'est du Excel : y'a pas de miracle :/
T'as désactivé le recalcul auto pendant l'exécution de ta macro ?
 
Application.Calculation = xlCalculateManual
 
C'est ça l'option, il me semble.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-05-2017 à 17:50:15    

Il fait du python, le module xlrd n'exécute pas les macro ni les formules.
 
Pour moi il y a deux solutions:
- Ne pas utiliser excel
- Utiliser le "vrai" excel et pas xlrd. Tu peux regarder du côté de win32com pour le contrôler depuis un script python. De cette manière tu pourra utiliser les fonctions haut niveau d'excel. Mais ne t'attends pas à des miracles non plus.


---------------
sheep++
Reply

Marsh Posté le 02-05-2017 à 22:02:38    

En PHP, t'as l'équivalent avec COM (OLE32).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed