Bonjour,
Dans le code ci-dessous, j'utilise PyQt4 pour ecrire des données dans un fichier Excel.
Si tout se passe bien lorsque je valide, j'ai par contre un problème pour le bouton Quitter, je ne parviens pas à enregistrer le fichier...
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
78
79
80
81
82
83
84
85
86
# -*- coding: utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import os, sys
from untitled import *
import win32com.client as win32
import win32com.client.dynamic
from pywintypes import UnicodeType, TimeType
 
 
class entree(QtGui.QDialog):
  def __init__(self, parent=None):
    super(entree, self).__init__(parent)
    self.setLayout(QtGui.QGridLayout())
 
    self.lab_NumDos = QtGui.QLabel(self.tr("Entrez le numéro de dossier :"))
    self.lab_NumProj = QtGui.QLabel("Entrez le numéro de projet:")
    self.lab_Longueur = QtGui.QLabel("Entrez la longueur :")
    self.entry_NumDos = QtGui.QLineEdit()
    self.entry_NumProj = QtGui.QLineEdit()
    self.entry_Longueur = QtGui.QLineEdit()
 
 
    widg_but = QtGui.QWidget()
    widg_but.setLayout(QtGui.QHBoxLayout())
    self.but_ok = QtGui.QPushButton('Valider')
    self.but_ko = QtGui.QPushButton('Annuler')
    widg_but.layout().addStretch()
    widg_but.layout().addWidget(self.but_ok)
    widg_but.layout().addWidget(self.but_ko)
    widg_but.layout().addStretch()
 
 
    self.layout().addWidget(self.lab_NumDos,0,0)
    self.layout().addWidget(self.entry_NumDos,0,1)
    self.layout().addWidget(self.lab_NumProj,1,0)
    self.layout().addWidget(self.entry_NumProj,1,1)
    self.layout().addWidget(self.lab_Longueur,2,0)
    self.layout().addWidget(self.entry_Longueur,2,1)
    self.layout().addWidget(widg_but,3,0,1,2)
 
    self.connect(self.but_ok,
                        SIGNAL("clicked()"),
                        self.valide);
 
    self.connect(self.but_ko,
                     SIGNAL("clicked()"),
                     self.Quitter);
 
  def valide(self):
    """ validation et entrée des données dans une feuille excel"""
    DEFAULT = 0.00
    DEFAULTINT = 0
    DEFAULTSTR = ""
    aDossier = self.entry_NumDos.text()
    aProjet = self.entry_NumProj.text()
    aCumul = self.entry_Longueur.text()
 
    # Démarrage excel
    excel = win32com.client.dynamic.Dispatch('Excel.Application')
    # Ouverture du fichier pour édition
    xls = excel.Workbooks.Open ('E:\TRAVAIL\NouveauCsc\Data\Book1.xls')
    excel.Visible = True
    sht = xls.Worksheets('Calcul')
    sht.Activate()
    #Ecriture
    sht.Cells(1,1).Value = float(aDossier)
    sht.Cells(2,1).Value = float(aProjet)
    sht.Cells(3,1).Value = float(aCumul)
 
  def Quitter(self):
    """enregistrement du fichier excel et quitter"""
    fichier = QFileDialog.getSaveFileName(self, "Enregistrer un fichier", QString(), "Fichier Excel (*.xls)") #QFileDialog s'affiche
    if fichier:
        xls.SaveAs(str(fichier))
        xls.Close()
        os.startfile (str(fichier))
        QtCore.SLOT('close()')
 
 
if __name__=='__main__':
  import sys
  app=QtGui.QApplication(sys.argv)
  fen = entree()
  fen.show()
  sys.exit(app.exec_())
En effet, si la boite de dialogue s'ouvre bien, pas moyen de sauvegarder et quitter, en raison de la portée de la variable "xls", j'obtiens le message:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Traceback (most recent call last):
  File "E:\TRAVAIL\NouveauCsc\encodage.py", line 87, in Quitter
    xls.SaveAs(str(fichier))
NameError: global name 'xls' is not defined
Ma question: Comment faire pour indiquer à python que xls est le fichier ouvert dans ma fonction "valide" ?
Merci,