2012-08-08 9 views
9

Tak, mam QTableWidget że chcę zapisać go do pliku .xls przy użyciu modułu xlwt ...PyQt: QTableWidget do pliku .xls

Oto kod:

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 

Ale że pisze się tylko tekst z komórki 0,0 i nic więcej ...

myślę, że zrobiłem jakiś poważny błąd ...

Aktualizacja:

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    

rozwiązało problem ...

+0

Jakieś pomysły? Ktoś? – Antoni4040

+0

Pytanie dla ciebie - z self.tableWidget.item (row, col) .text()), pojawia się błąd "NoneType", który nie ma wartości "text". Jakieś pomysły? Dzięki za opublikowanie tego - niezmiernie pomocna! –

+0

Może dlatego, że nie było tekstu do jednej konkretnej komórki, użyj "try:" i "z wyjątkiem NoneTypeError:" i powiedz mi, co otrzymujesz ... A tak przy okazji, czy przekonwertowałeś ją na ciąg? Cóż, nie mam żadnych takich błędów ... – Antoni4040

Odpowiedz

1

Może również okazać się bardziej zwięzłe i łatwiejsze w użyciu wyjście zakresie (lub xrange) jako indeksów na Twój telefon tableWidget.item zamiast martwić zwiększanie własnych liczników. Można się przy użyciu samego arkusza w innych miejscach w kodzie, ale jeśli nie jesteś, to zaoszczędzić trochę pamięci, aby nie przypisywać arkusz być zmienna atrybutem klasy:

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 

Ponieważ jesteś za pomocą polecenia range zmienna currentColumn zwiększy od 0 do columnCount(), a currentRow zwiększy od 0 do currentRow()

+0

Tak, to działa również ... – Antoni4040

Powiązane problemy