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
|
def lireCsv(self):#Lit le fichier CSV (nom_fichier_resultat.csv) contenant les _stat dans un dictionnaire
#Liste des champs du fichier CSV !!!! listeDesChamps existe dans module Imporstat
#listeDesChamps = ['Name','Min','Mean','Max']
#Lire le fichier *_stat.txt, séparateur : separateur_export_csv (fichier .ini)
#Remplacer le délimiteur par sa valeur dans le fichier .ini
fichierOuvert = open(self.fichier_csv_resultat.name, "rb")
lecteur = csv.DictReader(fichierOuvert, delimiter = ';')
self.dictTemp = {}
#Création du dictionnaire contenant tous les enregistrement du fichier .csv
for row in lecteur:
#Dans la clef de self.dictTemp[] on met le nom du paramètre lu dans le fichier .csv
#et comme valeur on met le dictionnaire lu dans le fichier .csv
#c'est à dire toute la ligne 'Name', 'Min','Mean','Max'...
self.dictTemp[row['Name']] = row
#A l'utilisation, pour obtenir la ligne correspondant à un paramètre :
# try : toto = self.dictTemp[nom_du_paramétre]
# except : print 'le paramétre n'existe pas'
fichierOuvert.close
def ouvrirFichierWord(self):#Ouvre Word
# Start Word and open the .doc file:
self.word = win32com.client.Dispatch('Word.Application')
#Je ne sait pas siles time.sleep sont indispensable, ils viennent de l'exemple que
#j'ai utilisé.
time.sleep(2)
self.word.Visible = True
time.sleep(2)
self.workbook = self.word.Documents.Open(FileName=self.modele_rapport.name)
time.sleep(2)
#Réduire la fenêtre Word dans la barre des tâches, la vitesse de traitement
#devient supersonique
self.word.WindowState = self.wdWindowStateMinimize
def remplacerDansRapport(self):#Remplace dans le document Word les mots clef par leur valeur
#Parcourir tous les paramètres lus dans le fichier .csv et les remplacer par leur valeur
for cle, ligne in self.dictTemp.iteritems():
for cleLigne, valeur in ligne.iteritems():
motCleAremplacer = '$'+cle+'_'+cleLigne
#Formattage en flottant avec 4 chiffres significatifs
#remplacer ',' par "." pour mettre la string au format numérique
valeur = valeur.replace( ',', '.')
#Formattage pour les valeurs numériques les chaines ne sont pas formattées (champ 'name' par exemple)
try : valeur = '%(nb)0.5g' %{"nb": float(valeur)}
except : pass
#remplacer '.' par ","
valeur = valeur.replace( '.', ',')
#Remplacer le mot clé par sa valeur dans le doc Word
self.remplacerDansWord(motCleAremplacer, valeur)
def remplacerDansWord(self, oldchaine, newchaine):#Remplace oldchaine par newchaine dans le doc ouvert
#Selection.Find.Replacement.ClearFormatting
#print 'Rapport - Traitement de', oldchaine
sel = self.word.Selection
sel.Find.Replacement.ClearFormatting
sel.Find.Text = oldchaine
sel.Find.Forward = True
newchaine=newchaine.replace('\n','\r')
sel.Find.Execute( oldchaine,False,False,False,False,False,True,self.wdFindContinue,False,newchaine,self.wdReplaceAll)
#time.sleep(2) |
Partager