10

だから、私はxlwtモジュールを使用して.xlsファイルに保存したい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             

問題を解決しました...

4

1 に答える 1

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()に増分します。

于 2012-11-18T06:07:51.723 に答える