2012-08-08 7 views
9

Donc, j'ai QTableWidget que je veux enregistrer dans un fichier .xls en utilisant le module xlwt ...PyQt: QTableWidget à .xls fichier

Voici le code:

def savefile(self): 
     filename = unicode(QtGui.QFileDialog.getSaveFileName(self, 'Save File', '', ".xls(*.xls)"))  
     wbk = xlwt.Workbook() 
     self.sheet = wbk.add_sheet("sheet") 
     self.row = 0 
     self.col = 0 
     self.add2(self.row, self.col) 
     wbk.save(filename)  


def add2(self, row, col): 
    for i in range(self.tableWidget.columnCount()): 
     for x in range(self.tableWidget.rowCount()): 
      try: 
       teext = str(self.tableWidget.item(row, col).text()) 
       self.sheet.write(row, col, teext) 
       row += 1 
      except AttributeError: 
       pass     
     col += 1 

Mais qui écrit que le texte de la cellule et rien d'autre 0,0 ...

Je pense que je l'ai fait une grave erreur ...

Mise à jour:

def savefile(self): 
     filename = unicode(QtGui.QFileDialog.getSaveFileName(self, 'Save File', '', ".xls(*.xls)"))  
     wbk = xlwt.Workbook() 
     self.sheet = wbk.add_sheet("sheet", cell_overwrite_ok=True) 
     self.add2() 
     wbk.save(filename)  


def add2(self): 
    row = 0 
    col = 0   
    for i in range(self.tableWidget.columnCount()): 
     for x in range(self.tableWidget.rowCount()): 
      try:    
       teext = str(self.tableWidget.item(row, col).text()) 
       self.sheet.write(row, col, teext) 
       row += 1 
      except AttributeError: 
       row += 1 
     row = 0 
     col += 1    

Résolu le problème ...

+0

Des idées? N'importe qui? – Antoni4040

+0

Question pour vous-- avec le self.tableWidget.item (ligne, col) .text()), j'obtiens une erreur "NoneType" cet objet n'a pas de valeur "text". Des idées? Merci d'avoir posté ceci - extrêmement utile! –

+0

Peut-être parce qu'il n'y avait pas de texte dans une cellule en particulier, utilisez "try:" et "exceptTypeError:" et dites-moi ce que vous obtenez ... En passant, l'avez-vous converti en chaîne? Eh bien, je ne reçois aucune erreur comme ça ... – Antoni4040

Répondre

1

Vous trouverez peut-être aussi plus concis et plus facile à utiliser la sortie de la gamme (ou xrange) comme les index pour votre appel tableWidget.item plutôt que de se soucier de incrémenter vos propres compteurs. Vous pouvez utiliser la feuille elle-même dans d'autres endroits dans le code, mais si vous n'êtes pas, il vous permettra d'économiser de la mémoire pour ne pas affecter la feuille à une variable d'attribut de votre classe:

def savefile(self): 
    filename = unicode(QtGui.QFileDialog.getSaveFileName(self, 'Save File', '', ".xls(*.xls)"))  
    wbk = xlwt.Workbook() 
    sheet = wbk.add_sheet("sheet", cell_overwrite_ok=True) 
    self.add2(sheet) 
    wbk.save(filename) 

def add2(self, sheet): 
    for currentColumn in range(self.tableWidget.columnCount()): 
     for currentRow in range(self.tableWidget.rowCount()): 
      try: 
       teext = str(self.tableWidget.item(currentRow, currentColumn).text() 
       sheet.write(currentRow, currentColumn, teext) 
      except AttributeError: 
       pass 

Parce que vous êtes en utilisant la commande range, la variable currentColumn va augmenter de 0 à columnCount() et currentRow va augmenter de 0 à currentRow()

+0

Oui, cela fonctionne aussi ... – Antoni4040

Questions connexes