Python PyQt从excel填充QTableWidget

Python PyQt从excel填充QTableWidget,python,excel,pyqt,openpyxl,qtablewidget,Python,Excel,Pyqt,Openpyxl,Qtablewidget,我试图用excel文件中的一些数据填充QTableWidget,我只想在ID位于listID上时将行添加到我的QTable,并且我在QTable单元格中没有得到任何数据 这里是一个excel文件,它不包含任何formatin或公式,只包含空的行和列,因为文件是自动生成的 这是我的密码 wb = openpyxl.load_workbook(os.path.join(os.getcwd(), file), read_only=True) ws = wb.active headers = [] f

我试图用excel文件中的一些数据填充QTableWidget,我只想在ID位于listID上时将行添加到我的QTable,并且我在QTable单元格中没有得到任何数据

这里是一个excel文件,它不包含任何formatin或公式,只包含空的行和列,因为文件是自动生成的

这是我的密码

wb = openpyxl.load_workbook(os.path.join(os.getcwd(), file), read_only=True)
ws = wb.active

headers = []
for item in ws[4]:
    headers.append(item.value)
headers.pop(0)

listID = []
for index in range(self.listWidgetID.count()):
    listID.append(self.listWidgetID.item(index).text())

data = ws.iter_rows(row_offset=5, column_offset=1)

row_increment = 0
self.tableWidgetDATA.setRowCount(1)
self.tableWidgetDATA.setColumnCount(len(headers))
self.tableWidgetDATA.setHorizontalHeaderLabels(headers)

for x, rows in enumerate(data):
    if str(rows[0].value) in listID:
        for y, cell in enumerate(rows):
            item = QTableWidgetItem(str(cell.value))
            self.tableWidgetDATA.setItem(x, y, item)
        row_increment = row_increment + 1
        self.tableWidgetDATA.setRowCount(row_increment)

要将元素添加到
QTableWidget
,位置必须是
setRowCount()
,如果在添加后更新,则不会保存该元素,另一个错误是您没有验证数据是否有效

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.tableWidgetDATA = QTableWidget(self)
        self.listWidgetID = QListWidget(self)
        self.setLayout(QVBoxLayout())
        self.layout().addWidget(self.listWidgetID)
        self.layout().addWidget(self.tableWidgetDATA)
        self.listWidgetID.addItems(["113894", "113906", "113895"])
        file = "Livro2.xlsx"
        wb = openpyxl.load_workbook(os.path.join(os.getcwd(), file), read_only=True)
        ws = wb.active

        headers = [item.value for item in ws[4] if item.value is not None]

        listID = [self.listWidgetID.item(i).text() for i in range(self.listWidgetID.count())]

        data = ws.iter_rows(row_offset=5, column_offset=1)

        self.tableWidgetDATA.setColumnCount(len(headers))
        self.tableWidgetDATA.setHorizontalHeaderLabels(headers)

        for x, rows in enumerate(data):
            if rows[0].value is not None:
                if str(rows[0].value) in listID:
                    self.tableWidgetDATA.setRowCount(self.tableWidgetDATA.rowCount()+1)
                    for y, cell in enumerate(rows):
                        val = cell.value
                        if val is not None:
                            item = QTableWidgetItem(str(val))
                            self.tableWidgetDATA.setItem(self.tableWidgetDATA.rowCount()-1, y, item)
输出:


您正在比较QListWidget的元素与excel的元素,并且您没有提供excel或列表,请提供一个抱歉的消息,更新了我的postyes it woks!thnx!我学到了很多,代码现在已经非常干净了xD