2012-08-08 76 views
9

所以,我有一個QTableWidget的,我希望把它保存到使用xlwt模塊.xls文件...PyQt的:QTableWidget的,以.xls文件

下面的代碼:

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 

但即寫出只能從小區0,0,並沒有別的文本...

我認爲,我已經取得了一些嚴重的錯誤......

更新:

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    

問題解決了......

+0

任何想法?任何人? – Antoni4040 2012-08-08 11:34:08

+0

對於你的問題 - 與self.tableWidget.item(row,col).text()),我得到一個「NoneType」的錯誤,該對象沒有值「文本」。有任何想法嗎?感謝您發佈此信息 - 非常有幫助! – 2012-09-26 20:52:14

+0

也許這是因爲沒有文本給一個特定的單元格,請使用「try:」和「除了NoneTypeError:」並告訴我你得到了什麼...順便說一句,你是否將它轉換爲字符串?那麼,我不會有這樣的錯誤... – Antoni4040 2012-09-27 12:49:18

回答

1

您也可能會發現它更簡潔,更容易使用範圍的輸出(或xrange)爲指標爲您tableWidget.item調用,而不必擔心遞增你自己的計數器。你可能會使用的紙張本身在代碼中的其他地方,但如果你不是,它會爲你節省一些內存在紙張不分配是你的類的屬性變量:

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 

因爲你是使用range命令,currentColumn變量將從0遞增到columnCount(),並且currentRow將從0遞增到currentRow()

+0

是的,這也適用... – Antoni4040 2012-11-18 07:47:52