python打开execl文件并显示在GUI界面上

import sys
import pandas as pd
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFileDialog, QLabel, QLineEdit, QPushButton, QTableWidget, QTableWidgetItem


class ExcelProcessingApp(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        # 创建布局
        layout = QVBoxLayout()

        # 文件选择控件
        self.file_label = QLabel('选择Excel文件:')
        self.file_edit = QLineEdit()
        self.file_button = QPushButton('浏览')
        self.file_button.clicked.connect(self.show_file_dialog)

        layout.addWidget(self.file_label)
        layout.addWidget(self.file_edit)
        layout.addWidget(self.file_button)

        # 输入框:从第几行到第几行
        self.range_label = QLabel('输入行范围(例如:1-10):')
        self.range_edit = QLineEdit()

        layout.addWidget(self.range_label)
        layout.addWidget(self.range_edit)

        # 确定按钮
        self.confirm_button = QPushButton('确定')
        self.confirm_button.clicked.connect(self.process_excel)

        layout.addWidget(self.confirm_button)

        # 显示Excel文件内容的控件
        self.result_label = QLabel('Excel文件内容:')
        self.result_table = QTableWidget()

        layout.addWidget(self.result_label)
        layout.addWidget(self.result_table)

        # 设置主窗口布局
        self.setLayout(layout)

        # 设置主窗口属性
        self.setWindowTitle('Excel处理工具')
        self.setGeometry(300, 300, 600, 400)

    def show_file_dialog(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        file_name, _ = QFileDialog.getOpenFileName(self, "选择Excel文件", "", "Excel 文件 (*.xlsx *.xls);;All Files (*)", options=options)

        if file_name:
            self.file_edit.setText(file_name)

    def process_excel(self):
        file_path = self.file_edit.text()
        row_range = self.range_edit.text()

        try:
            if row_range:
                start_row, end_row = map(int, row_range.split('-'))
                if start_row >= 1 and end_row > start_row:
                    df = pd.read_excel(file_path, skiprows=range(1, start_row), nrows=end_row - start_row + 1)
                else:
                    raise ValueError("行范围不正确")
            else:
                df = pd.read_excel(file_path)

            self.display_table(df)

        except Exception as e:
            self.result_table.setRowCount(0)
            self.result_table.setColumnCount(0)
            self.result_label.setText(f"发生错误:{str(e)}")

    def display_table(self, df):
        # 清空表格
        self.result_table.setRowCount(0)
        self.result_table.setColumnCount(0)

        # 设置表格行列数
        self.result_table.setRowCount(df.shape[0])
        self.result_table.setColumnCount(df.shape[1])

        # 设置表头
        self.result_table.setHorizontalHeaderLabels(df.columns.astype(str))

        # 填充表格数据
        for i, row in df.iterrows():
            for j, value in enumerate(row):
                item = QTableWidgetItem(str(value))
                self.result_table.setItem(i, j, item)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ExcelProcessingApp()
    ex.show()
    sys.exit(app.exec_())
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值