利用所学相关Pyqt实现对于Excel文件内部数据的处理,首先需要获取Excel的数据,在获取后进行保存处理即可完成相应的操作。
def save_data_btn_click(self):dir = self.save_dir_text.text().strip()self.data_frame_group.to_excel(dir + 'output.xlsx',sheet_name='datasum')
这是一个Python函数,名为
save_data_btn_click
,它的作用是保存数据到指定的文件中。该函数接受两个参数:self
是一个pandas
数据框对象,用于保存数据;dir
是一个字符串,用于指定保存文件的路径。在函数中,首先通过
self.save_dir_text.text().strip()
获取保存文件的路径,然后使用self.data_frame_group.to_excel(dir + 'output.xlsx',sheet_name='datasum')
将数据框保存到指定的文件中。需要注意的是,在使用
pandas
库时,需要先安装该库,并将其添加到Python的模块搜索路径中。
def view_data_btn_click(self):columns = self.data_group_column_text.text().strip()column_list = []if columns != '':column_list = columns.split(',')self.data_frame_group = self.data_frame.groupby(column_list, as_index=False).sum()print(self.data_frame_group)model = TableModelView(self.data_frame_group)self.table_view.setModel(model)
这是一个Python函数,名为
view_data_btn_click
,它的作用是显示数据框中的数据。该函数接受两个参数:self
是一个pandas
数据框对象,用于显示数据;columns
是一个字符串,用于指定要显示的列名。在函数中,首先通过
self.data_group_column_text.text().strip()
获取要显示的列名,然后使用self.data_frame_group.groupby(column_list, as_index=False).sum()
将数据框按列名分组,并使用print(self.data_frame_group)
打印分组后的数据。接着,创建一个
TableModelView
对象,并将分组后的数据框作为参数传入。最后,使用self.table_view.setModel(model)
将TableModelView
对象设置为数据框的模型。
def save_dir_btn_click(self):save_path = QFileDialog.getExistingDirectory(self, 'chooselab', self.cwd)self.save_dir_text.setText(save_path + '/')
这是一个Python函数,名为
save_dir_btn_click
,它的作用是从用户那里获取保存文件的目录路径,并将其保存到一个字符串变量中。该函数接受两个参数:self
是一个QFileDialog
对象,用于获取用户选择的目录路径;save_path
是一个字符串变量,用于保存用户选择的目录路径。在函数中,首先使用
QFileDialog.getExistingDirectory()
方法获取用户选择的目录路径,并将其保存到save_path
变量中。然后,将save_path
变量设置为QFileDialog.getExistingDirectory()
方法的返回值,以便在下次调用该函数时能够获取用户选择的目录路径。
def data_source_btn_click(self):xlsx_file = QFileDialog.getOpenFileName(self, 'choosetxt', self.cwd, 'Excel File(*.xlsx)')self.data_source_text.setText(xlsx_file[0])self.data_frame = pd.read_excel(self.data_source_text.text().strip())print(self.data_frame)model = TableModelView(self.data_frame)self.table_view.setModel(model)
这是一个Python函数,名为
data_source_btn_click
,它的作用是从用户那里获取Excel文件的文件名,并将其保存到一个字符串变量中。该函数接受两个参数:self
是一个QFileDialog
对象,用于获取用户选择的文件路径;xlsx_file
是一个字符串变量,用于保存用户选择的文件路径。在函数中,首先使用
QFileDialog.getOpenFileName()
方法获取用户选择的文件路径,并将其保存到xlsx_file
变量中。然后,将xlsx_file
变量设置为QFileDialog.getOpenFileName()
方法的返回值,以便在下次调用该函数时能够获取用户选择的文件路径。接着,使用
pd.read_excel()
方法读取Excel文件,并将其保存到self.data_frame
变量中。最后,创建一个TableModelView
对象,并将self.data_frame
变量作为参数传入。最后,使用self.table_view.setModel(model)
将TableModelView
对象设置为数据框的模型。
汇总:
import sys
import os
from qdarkstyle import load_stylesheet_pyqt5
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import pandas as pdclass TableModelView(QAbstractTableModel):def __init__(self, data):QAbstractTableModel.__init__(self)self._data = datadef rowCount(self, parent=None):return self._data.shape[0]def columnCount(self, parent=None):return self._data.shape[1]def data(self, index, role=Qt.DisplayRole):if index.isValid():if role == Qt.DisplayRole:return str(self._data.iloc[index.row(), index.column()])return Nonedef headerData(self, col, orientation, role):if orientation == Qt.Horizontal and role == Qt.DisplayRole:return self._data.columns[col]return Noneclass DataGroupSum(QWidget):def __init__(self):super(DataGroupSum, self).__init__()self.cwd = os.getcwd()self.init_ui()def init_ui(self):# 标题、图标设置self.setWindowTitle('Excel data lab')# 初始化水平布局hbox = QHBoxLayout()# 初始化栅格布局grid = QGridLayout()self.data_source_text = QLineEdit()self.data_source_text.setReadOnly(True)self.data_source_btn = QPushButton()self.data_source_btn.setText('data')self.data_source_btn.clicked.connect(self.data_source_btn_click)self.data_group_column = QLabel()self.data_group_column.setText('setlab')self.data_group_column_text = QLineEdit()self.data_group_column_text.setPlaceholderText('line1,line2...')self.save_dir_text = QLineEdit()self.save_dir_text.setReadOnly(True)self.save_dir_btn = QPushButton()self.save_dir_btn.setText('road')self.save_dir_btn.clicked.connect(self.save_dir_btn_click)self.view_data_btn = QPushButton()self.view_data_btn.setText('preview')self.view_data_btn.clicked.connect(self.view_data_btn_click)self.save_data_btn = QPushButton()self.save_data_btn.setText('save')self.save_data_btn.clicked.connect(self.save_data_btn_click)grid.addWidget(self.data_source_text, 0, 0, 1, 2)grid.addWidget(self.data_source_btn, 0, 2, 1, 1)grid.addWidget(self.data_group_column, 1, 0, 1, 1)grid.addWidget(self.data_group_column_text, 1, 1, 1, 2)grid.addWidget(self.save_dir_text, 2, 0, 1, 2)grid.addWidget(self.save_dir_btn, 2, 2, 1, 1)grid.addWidget(self.view_data_btn, 3, 0, 1, 2)grid.addWidget(self.save_data_btn, 3, 2, 1, 1)self.table_view = QTableView()self.table_view.setFixedWidth(500)self.table_view.setFixedHeight(400)hbox.addWidget(self.table_view)hbox.addLayout(grid)self.setLayout(hbox)def data_source_btn_click(self):xlsx_file = QFileDialog.getOpenFileName(self, 'choosetxt', self.cwd, 'Excel File(*.xlsx)')self.data_source_text.setText(xlsx_file[0])self.data_frame = pd.read_excel(self.data_source_text.text().strip())print(self.data_frame)model = TableModelView(self.data_frame)self.table_view.setModel(model)def save_dir_btn_click(self):save_path = QFileDialog.getExistingDirectory(self, 'chooselab', self.cwd)self.save_dir_text.setText(save_path + '/')def view_data_btn_click(self):columns = self.data_group_column_text.text().strip()column_list = []if columns != '':column_list = columns.split(',')self.data_frame_group = self.data_frame.groupby(column_list, as_index=False).sum()print(self.data_frame_group)model = TableModelView(self.data_frame_group)self.table_view.setModel(model)def save_data_btn_click(self):dir = self.save_dir_text.text().strip()self.data_frame_group.to_excel(dir + 'output.xlsx',sheet_name='datasum')if __name__ == '__main__':app = QApplication(sys.argv)app.setStyleSheet(load_stylesheet_pyqt5())main = DataGroupSum()main.show()sys.exit(app.exec_())