pyside6使用openpyxl读取到QTableWidget显示,修改QTableWidget中指定行的数据后,保存数据到excle中
时间: 2025-06-28 09:07:24 浏览: 12
### 使用 PySide6 和 openpyxl 实现 Excel 数据与 QTableWidget 的交互
#### 加载 Excel 数据至 QTableWidget
为了将 Excel 文件的数据加载到 `QTableWidget` 中,可以先利用 `openpyxl` 读取 Excel 文件的内容并解析成 Python 列表结构。之后遍历该列表,在 `QTableWidget` 上创建相应的行和列来填充这些数据。
```python
from PyQt6.QtWidgets import QApplication, QMainWindow, QTableWidgetItem, QTableWidget
import sys
from openpyxl import load_workbook
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
table_widget = QTableWidget(self)
workbook = load_workbook('example.xlsx')
sheet = workbook.active
rows = list(sheet.rows)
column_count = max((cell.column for row in rows for cell in row))
row_count = len(rows)
table_widget.setColumnCount(column_count)
table_widget.setRowCount(row_count)
for i, row in enumerate(rows):
for j, cell in enumerate(row):
item = QTableWidgetItem(str(cell.value))
table_widget.setItem(i, j, item)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
```
这段代码展示了如何通过 `load_workbook()` 函数打开一个现有的 Excel 工作簿,并获取活动的工作表对象[^1]。接着计算工作表的最大列数以及总行数设置给 `QTableWidget` 。最后迭代每一行列单元格,把它们转换为字符串形式并通过 `setItem()` 方法放置于对应的表格位置上。
#### 更新 Excel 文件中的数据
当用户在界面上修改了某些条目后,可以通过监听特定事件捕获变化并将更改同步回原始的 Excel 文档中:
```python
def save_changes_to_excel(self):
workbook = load_workbook('example.xlsx')
sheet = workbook.active
for row_index in range(self.table_widget.rowCount()):
for col_index in range(self.table_widget.columnCount()):
value = self.table_widget.item(row_index, col_index).text()
sheet.cell(row=row_index + 1, column=col_index + 1, value=value)
workbook.save('updated_example.xlsx')
```
此函数会重新加载相同的 Excel 文件以便能够写入新的值。对于每一个被改变过的项,找到其对应的位置更新原文件内的相应单元格内容。完成所有必要的更正操作后调用 `save()` 来持久化变更结果到磁盘上的新文件里。
阅读全文
相关推荐


















