PyQt:将QTableWidget转换为.xls文件

10

所以,我有一个QTableWidget,我想使用xlwt模块将其保存到一个.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             

问题已解决...


请教一个问题——使用self.tableWidget.item(row,col).text(),我得到了一个“NoneType”错误,表示对象没有“text”的值。你有什么想法吗?谢谢你的发布,非常有帮助! - Victoria Price
也许是因为一个特定单元格中没有文本,尝试使用 "try:" 和 "except NoneTypeError:" 并告诉我你得到了什么... 顺便问一下,你把它转换成字符串了吗?嗯,我没有遇到任何这样的错误... - Antoni4040
1个回答

1
你可能会发现,使用 range(或 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

由于您正在使用范围命令,currentColumn变量将从0增加到columnCount(),而currentRow将从0增加到currentRow()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接