Pyqt应用相关之与Excel的联接

Pyqt应用相关之与Excel的联接_第1张图片

        利用所学相关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 pd

class TableModelView(QAbstractTableModel):
    def __init__(self, data):
        QAbstractTableModel.__init__(self)
        self._data = data

    def 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 None

    def headerData(self, col, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self._data.columns[col]
        return None


class 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_())

你可能感兴趣的:(Pyqt技术教程专栏,pyqt)