PyQt:QTableWidget 到 .xls 文件

问题描述 投票:0回答:2

所以,我有一个 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             

解决了问题...

python pyqt xls qtablewidget
2个回答
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
投票

你能向我解释一下第 2 行中的 unicode 是什么吗?

© www.soinside.com 2019 - 2024. All rights reserved.