PySide6讀取EXCLE文件
阿新 • • 發佈:2021-08-11
1、新建一個run.py(要執行的檔案),程式碼如下
# -*- coding: utf-8 -*- """ 檔名稱: run.py 檔案建立時間: 2021/8/10 11:08 軟體名稱: PyCharm 檔案作者: 黃氏 """ import sys from PySide6 import QtCore from PySide6.QtWidgets import QApplication import pandas as mypd # 匯入所畫的介面 from tabledemo import * # 自定義類 class Excel_Table(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.excelButton.clicked.connect(self.Open_Excel_File) # connect作用就是執行某個函式 self.saveButton.clicked.connect(self.Excel_Save) def Open_Excel_File(self): excel_name= QFileDialog.getOpenFileName(self, '選擇檔案', '', 'Excel files(*.xlsx)') # 過濾出xlsx格式的檔案 self.path_excel_name = excel_name[0] print("Excel文件的路徑: ", self.path_excel_name) if len(self.path_excel_name) > 0: self.Read_Excel_Data() self.Table_Initialize() # 讀取 EXCEL 文件的資料 def Read_Excel_Data(self): self.excel_file= mypd.read_excel(self.path_excel_name) # 獲取資料的行標籤與列標籤 self.columns = self.excel_file.columns self.rows = self.excel_file.index # 定義表格的初始化引數 def Table_Initialize(self): self.tableWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.tableWidget.setRowCount(len(self.rows)) # 設定表格的行數 self.tableWidget.setColumnCount(len(self.columns)) # 設定表格的列數 self.tableWidget.setHorizontalHeaderLabels(self.columns) # 設定表格的列標籤 self.tableWidget.setGeometry(QtCore.QRect(223,120,1000,800)) # 重新設定表格區域的大小 # 將 EXCEL 文件的資料顯示在表格中 for i in range(len(self.rows)): for j in range(len(self.columns)): tstr = str(self.excel_file.iloc[i][j]) data = QTableWidgetItem(tstr) self.tableWidget.setItem(i, j, data) self.tableWidget.resizeColumnsToContents() # 列寬隨著內容調整 self.tableWidget.resizeRowsToContents() # 行寬隨著內容調整 self.tableWidget.setAlternatingRowColors(True) # 表格的顏色交錯顯示 self.tableWidget.itemChanged.connect(self.Table_Data_Change) # 將表格中單元格改變時,觸發 Table_Data_Change 事件 # 當表格的內容改變時獲取內容 def Table_Data_Change(self,item): text = item.text() itemrow = item.row() itemcol = item.column() self.excel_file.iloc[itemrow,itemcol] = text # 使用[i][j]形式會報銷
def Excel_Save(self): self.excel_file.to_excel(self.path_excel_name, index=False) if __name__ == '__main__': app = QApplication(sys.argv) excelTable = Excel_Table() excelTable.show() sys.exit(app.exec())
2、新建一個ui的python文件,檔案tabledemo.py程式碼如下(我是用QtDesigner設計,通過PyUIC命令轉換過來的)
# -*- coding: utf-8 -*- ################################################################################ ## Form generated from reading UI file 'tabledemo.ui' ## ## Created by: Qt User Interface Compiler version 6.1.2 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ from PySide6.QtCore import * # type: ignore from PySide6.QtGui import * # type: ignore from PySide6.QtWidgets import * # type: ignore class Ui_MainWindow(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") MainWindow.resize(918, 538) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setLayoutDirection(Qt.LeftToRight) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.formLayout = QFormLayout(self.centralwidget) self.formLayout.setObjectName(u"formLayout") self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setObjectName(u"horizontalLayout") self.excelButton = QPushButton(self.centralwidget) self.excelButton.setObjectName(u"excelButton") self.horizontalLayout.addWidget(self.excelButton) self.horizontalSpacer = QSpacerItem(808, 17, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout.addItem(self.horizontalSpacer) self.formLayout.setLayout(0, QFormLayout.LabelRole, self.horizontalLayout) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") self.horizontalSpacer_2 = QSpacerItem(828, 18, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(self.horizontalSpacer_2) self.saveButton = QPushButton(self.centralwidget) self.saveButton.setObjectName(u"saveButton") sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth(self.saveButton.sizePolicy().hasHeightForWidth()) self.saveButton.setSizePolicy(sizePolicy1) self.saveButton.setContextMenuPolicy(Qt.DefaultContextMenu) self.saveButton.setLayoutDirection(Qt.LeftToRight) self.horizontalLayout_2.addWidget(self.saveButton) self.formLayout.setLayout(2, QFormLayout.LabelRole, self.horizontalLayout_2) self.tableWidget = QTableWidget(self.centralwidget) self.tableWidget.setObjectName(u"tableWidget") self.tableWidget.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents) self.formLayout.setWidget(1, QFormLayout.SpanningRole, self.tableWidget) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(MainWindow) self.menubar.setObjectName(u"menubar") self.menubar.setGeometry(QRect(0, 0, 918, 22)) MainWindow.setMenuBar(self.menubar) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName(u"statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) # setupUi def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) self.excelButton.setText(QCoreApplication.translate("MainWindow", u"\u6253\u5f00Excel", None)) self.saveButton.setText(QCoreApplication.translate("MainWindow", u"\u4fdd \u5b58", None)) # retranslateUi