2012-08-08 13 views
9

Also, ich habe eine QTableWidget, dass ich es auf eine .xls-Datei mit dem xlwt Modul speichern möchten ...PyQt: QTableWidget-Datei .xls

Hier ist der 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 

Aber dass schreibt nur den Text aus der Zelle 0,0 und sonst nichts ...

ich denke, dass ich einige schwere Fehler gemacht haben ...

Update:

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    

das Problem gelöst ...

+0

Irgendwelche Ideen? Jemand? – Antoni4040

+0

Frage für Sie - mit der self.tableWidget.item (row, col) .text()), bekomme ich einen "NoneType" -Fehler, dass das Objekt keinen Wert "text" hat. Irgendwelche Ideen? Danke für das Posten dieses - sehr hilfreich! –

+0

Vielleicht liegt es daran, dass zu einer bestimmten Zelle kein Text vorhanden war, benutze "try:" und "except NoneTypeError:" und sag mir, was du bekommst ... Übrigens, hast du es in eine Zeichenkette umgewandelt? Nun, ich bekomme keine Fehler so ... – Antoni4040

Antwort

1

Sie auch eher es kürzer und einfacher zu verwenden, um die Ausgabe des Bereichs (oder xrange) als die Indizes für Ihre tableWidget.item Anruf finden könnte, als sich Gedanken über Erhöhen Sie Ihre eigenen Zähler. Sie könnten das Blatt selbst an anderen Stellen im Code verwenden, aber wenn Sie nicht sind, dann würde es Ihnen etwas Speicher spart das Blatt nicht zuweisen eine Attributvariable Ihrer Klasse zu sein:

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 

Weil Sie Mit dem Befehl range wird die Variable currentColumn von 0 bis columnCount() und currentRow von 0 bis currentRow() erhöht.

+0

Ja, das funktioniert auch ... – Antoni4040