2012-08-08 16 views
9

तो .xls करने के लिए, मैं एक QTableWidget है कि मैं xlwt मॉड्यूल का उपयोग कर एक .xls फ़ाइल में सहेजने के लिए चाहते हैं ...PyQt: QTableWidget फ़ाइल

कोड यह रहा:

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

+0

आपके लिए प्रश्न - self.tableWidget.item (पंक्ति, col) .text()) के साथ, मुझे "noneType" त्रुटि मिलती है जिसमें ऑब्जेक्ट का कोई मान "टेक्स्ट" नहीं होता है। कोई विचार? इसे पोस्ट करने के लिए धन्यवाद - बेहद सहायक! –

+0

शायद ऐसा इसलिए है क्योंकि एक विशेष सेल में कोई टेक्स्ट नहीं था, "try:" और "कोई भी टाइप टाइपर:" को छोड़कर और मुझे बताएं कि आपको क्या मिलता है ... वैसे, क्या आपने इसे स्ट्रिंग में परिवर्तित किया? खैर, मुझे इस तरह की कोई त्रुटि नहीं मिलती है ... – Antoni4040

उत्तर

1

तुम भी इसे और अधिक संक्षिप्त और के बारे में चिंता करने के बजाय अपने tableWidget.item कॉल के लिए अनुक्रमित के रूप में रेंज के उत्पादन में (या xrange) का उपयोग करने के आसान लग सकता है अपने काउंटरों को बढ़ाना आप पत्रक कोड में अन्य स्थानों में ही उपयोग कर रहा हो सकता है, लेकिन यदि आप नहीं कर रहे हैं, तो यह आपको कुछ स्मृति की बचत होगी चादर आवंटित नहीं करने के लिए अपने वर्ग की एक विशेषता चर होने के लिए:

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 

क्योंकि आप कर रहे हैं रेंज कमांड का उपयोग करके, वर्तमान कॉलम वैरिएबल 0 से कॉलमकाउंट() तक बढ़ेगा और वर्तमान पंक्ति 0 से चालू हो जाएगी()

+0

हां, यह भी काम करता है ... – Antoni4040