2012-08-08 23 views
9

.xls, ben burada PyQT: QTableWidget dosyasını Yani

kod ... Ben xlwt modülü kullanarak bir .xls dosyası kaydetmek istediğiniz bir QTableWidget var:

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 

Ama o ...

ben bazı ciddi hata yapmış olduğunu düşünüyorum ... hücrede 0,0 ve başka hiçbir yalnızca metin yazar

Güncelleme:Ayrıca endişesi yerine, tableWidget.item çağrısı için endeksler olarak aralığının çıkışını (veya xrange) kullanımı daha özlü ve daha kolay bulabilir

+0

Herhangi bir fikirden mi artacaktır? Kimse? – Antoni4040

+0

Soru - self.tableWidget.item (row, col) .text() ile), "text" değeri olmayan bir "NoneType" hatası alıyorum. Herhangi bir fikir? Bu gönderme için teşekkürler - çok yararlı! –

+0

Belki de belirli bir hücreye metin olmadığından, "try:" ve "NoneTypeError hariç" öğelerini kullanıp bana ne aldığınızı söyleyin ... Bu arada, dizeye dönüştürdünüz mü? Eh, ben böyle bir hata almıyorum ... – Antoni4040

cevap

1

sorun çözüldü

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    
... kendi sayaçlarınızı arttırmak.

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 

Çünkü sen: En sınıfının bir nitelik değişken olması sayfasını atamaz için kodda başka yerlerde levha kendisi kullanıyor olabilir, ama değilsin eğer, size bazı bellekten tasarruf ediyorum range komutu kullanılarak currentColumn değişkeni, 0'dan columnCount() 'a kadar artacak ve currentRow, 0'dan currentRow()

+0

Evet, bu da işe yarıyor ... – Antoni4040