![](/img/trans.png)
[英]how to save qtablewidget data into excel file using openpyxl
[英]How to add excel file to QTableWidget without erasing its column and data?
如何将 excel 数据加载到 QTableWidget? 我希望它出现在最后一个收件人数据之后
这是我使用的代码:
def addExcel(self, excel_file_dir, worksheet_name):
df = pd.read_excel(excel_file_dir, worksheet_name)
if df.size == 0:
return
df.fillna('', inplace=True)
self.tableWidget.setRowCount(df.shape[0])
self.tableWidget.setColumnCount(df.shape[1])
for row in df.iterrows():
values = row[1]
for col_index, value in enumerate(values):
if isinstance(value, (float, int)):
value = '{0:0,.0f}'.format(value)
tableItem = QTableWidgetItem(str(value))
self.tableWidget.setItem(row[0], col_index, tableItem)
正如setRowCount()
的文档所解释的:
将此表的模型中的行数设置为行。 如果这小于 rowCount(),则丢弃不需要的行中的数据。
setColumnCount()
显然也是如此。
如果要保留现有数据,显然必须根据新数据添加行数和列数。
考虑到数据模型通常会在保留列的同时增加记录数(行),因此您必须通过将当前行数增加新记录数来调用setRowCount()
,并根据现有记录之间的最大值设置列数列数和检索到的列数。
def addExcel(self, excel_file_dir, worksheet_name):
df = pd.read_excel(excel_file_dir, worksheet_name)
if df.size == 0:
return
df.fillna('', inplace=True)
newFirstRow = self.tableWidget.rowCount()
self.tableWidget.setRowCount(newFirstRow + df.shape[0])
self.tableWidget.setColumnCount(
max(self.tableWidget.columnCount(), df.shape[1]))
for rowData in df.iterrows():
row = newFirstRow + rowData[0]
values = rowData[1]
for col_index, value in enumerate(values):
if isinstance(value, (float, int)):
value = '{0:0,.0f}'.format(value)
tableItem = QTableWidgetItem(str(value))
self.tableWidget.setItem(row, col_index, tableItem)
注意: '{0:0,.0f}'.format(value)
在大多数情况下是毫无意义的:你可以使用str(round(value))
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.