PyQt从excel中填充QTableWidget

即时尝试填充QTableWidget从Excel文件中的一些数据,我想添加行到我的QTable只有当ID是在列表ID,并且我在QTable单元格中没有数据

https://drive.google.com/file/d/0B_PFK3V2Ij4tSko4emplYmNuN1E/view?usp=sharing这里是一个excel文件,它不包含任何格式或公式,只是空的行和列,因为文件是自动生成的

这是我的代码

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() ,在你添加后更新的情况下,所以不会被保存。另一个错误是你不validation数据是否有效。

 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) 

输出:

在这里输入图像说明