美文网首页
PyQt5 小工具:Excel数据分组汇总器...

PyQt5 小工具:Excel数据分组汇总器...

作者: Python集中营 | 来源:发表于2022-01-12 22:37 被阅读0次

    在写数据汇总分组工具之前梳理一下需求,要求一:能够将excel的数据展示到列表中。要求二:能够支持按列汇总数据,并且多列分组汇总。要求三:能够预览分组汇总以后的数据,最后将分好组汇总的数据保存到新的excel数据文件中。

    file

    【阅读全文】

    完整源代码的获取方式放在文末了,有需要的可以自行下载使用。

    主要使用到第三方python模块有下面这些,和前面几个 PyQt5 应用不同的是这次增加了一个样式模块 qdarkstyle ,通过最后将这个模块直接加入到 QApplication 中就可以显示成黑色酷酷的应用了。这个样式我个人是比较喜欢的...

    '''应用操作库'''
    import sys
    import os
    
    '''应用样式库'''
    from qdarkstyle import load_stylesheet_pyqt5
    
    '''UI界面库'''
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    
    '''数据提取库'''
    import pandas as pd
    

    编写 UI 界面组件布局,UI 布局函数 init_ui()。init_ui() 的函数整体内容都贴在下面这里,大佬们可以根据自己的需要随意发挥。

      def init_ui(self):
            # 标题、图标设置
            self.setWindowTitle('Excel数据汇总工具   公众号:[Python 集中营]')
            self.setWindowIcon(QIcon(':/data_sum.ico'))
    
            # 初始化水平布局
            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('数据')
            self.data_source_btn.clicked.connect(self.data_source_btn_click)
    
            self.data_group_column = QLabel()
            self.data_group_column.setText('设置分组列')
    
            self.data_group_column_text = QLineEdit()
            self.data_group_column_text.setPlaceholderText('列名1,列名2...')
    
            self.save_dir_text = QLineEdit()
            self.save_dir_text.setReadOnly(True)
    
            self.save_dir_btn = QPushButton()
            self.save_dir_btn.setText('路径')
            self.save_dir_btn.clicked.connect(self.save_dir_btn_click)
    
            self.view_data_btn = QPushButton()
            self.view_data_btn.setText('预览数据')
            self.view_data_btn.clicked.connect(self.view_data_btn_click)
    
            self.save_data_btn = QPushButton()
            self.save_data_btn.setText('保存')
            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(100)
    
            hbox.addWidget(self.table_view)
            hbox.addLayout(grid)
    
            self.setLayout(hbox)
    

    槽函数总共使用了四个,分别是下面这些。

    save_data_btn_click:将分组汇总后的 DataFrame 数据直接保存。

    data_source_btn_click:用来加载需要分组汇总的 excel 文件的,并将加载出来的 DataFrame 数据直接显示到 QTableView 的组件上面,这样可以实时的看见加载进来的原始数据。

    save_dir_btn_click:点击选择存储路径时触发的槽函数,用来调起 QFileDialog 来选择文件路径。

    view_data_btn_click:调起预览分组汇总后的数据,将分组后的数据显示到窗口上。

    槽函数 data_source_btn_click,加载 excel 源数据。

        def data_source_btn_click(self):
            xlsx_file = QFileDialog.getOpenFileName(self, '选择文件', 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)
    

    槽函数 save_data_btn_click,保存最终的 excel 数据。

        def save_data_btn_click(self):
            dir = self.save_dir_text.text().strip()
            self.data_frame_group.to_excel(dir + 'group_data.xlsx',sheet_name='数据信息汇总')
    

    槽函数 view_data_btn_click,预览分组汇总的数据。

        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)
    

    槽函数 save_dir_btn_click,存储文件选择。

        def save_dir_btn_click(self):
            save_path = QFileDialog.getExistingDirectory(self, '选择文件夹', self.cwd)
            self.save_dir_text.setText(save_path + '/')
    

    最后,在主要代码块中展示列表数据时时使用了一个 QTableView 组件自定义的模型 TableModelView,由于篇幅问题这里就不分享了,大家可以去公众号下载源码。

    【福利】公众号内回复 "Excel数据分组汇总器",获取完整源代码。

    【往期精选】

    ● 异常:存储MYSQL转义数据保证数据存储的准确性...

    ● 做一个小闹钟,按规划做事...

    ● 使用pyqt5的日期控件做一个小日历方便查看...

    ● 将几万张图片合成一张图片,制作一个超赞的马赛克图!

    ● 小工具批量将mp3音频格式转换为wav格式

    ● 不用H5,直接使用pywebio模块实现网页

    ● python回调函数能做什么?

    ● 解决pyinstaller打包过程中外部资源无法加载的问题 ...

    ● 如何在控制台实现一个数据管理系统(包括MYSQL数据库的增删改查)

    ● pyqt5做了一个二维码生成器,已打包成exe可执行程序...

    ● 自制文档格式转换器,支持 .txt/.xlsx/.csv格式转换...

    ● PyPDF2如何实现按照PDF页码提取后并另存为PDF格式文件?

    ● PyQt5 GUI:百度图片下载器(文末附源码)

    ● 浪漫的turtle,送给程序员自己的圣诞树!

    相关文章

      网友评论

          本文标题:PyQt5 小工具:Excel数据分组汇总器...

          本文链接:https://www.haomeiwen.com/subject/wgugcrtx.html