pyqt5:pandas 读取 Excel文件或 .etx 电子表格文件,并显示

pip install pandas ;

pip install pyqt5;

pip install pyqt5-tools;

编写 pyqt5_read_etx.py 如下

python 复制代码
# -*- coding: utf-8 -*-
""" pandas 读取 Excel文件或 .etx 电子表格文件,显示在 QTableWidget 中 """
import os
import sys
import numpy as np
import pandas as pd
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem
from PyQt5.uic import loadUi

class EtxReader(QMainWindow):

    def __init__(self):
        super(EtxReader, self).__init__()
        loadUi("readEtx.ui", self)  # Load the UI file
        self.file_path = ""  # To store the file path
        self.df = pd.DataFrame()  # To store the etx data
        self.browse_btn.clicked.connect(self.browse_file)
        self.read_btn.clicked.connect(self.read_etx)

    def browse_file(self):
        """ Open a file dialog to browse etx files.
        """
        file_name, _ = QFileDialog.getOpenFileName(self, "Open etx File", "",
                                "etx File(*.etx);;xlsx File(*.xlsx)")
        if file_name:
            self.file_path = file_name
            self.file_path_line_edit.setText(self.file_path)

    def read_etx(self):
        """ Read the etx file using Pandas and display the data in the table widget.
        """
        if not self.file_path:
            QMessageBox.critical(self, "Error", "Please select an etx file to read.")
            return
        try:
            self.df = pd.read_excel(self.file_path)
            self.table_widget.setRowCount(self.df.shape[0])
            self.table_widget.setColumnCount(self.df.shape[1])
            self.table_widget.setHorizontalHeaderLabels(map(str,self.df.columns))
            #print(list(map(str,self.df.columns)))
            print('shape:', self.df.shape)
            for i in range(self.df.shape[0]):
                for j in range(self.df.shape[1]):
                    v = self.df.iloc[i, j]
                    #print(v)
                    if v is None or v is np.nan:
                        item = QTableWidgetItem('')
                    else:
                        item = QTableWidgetItem(str(v))
                    self.table_widget.setItem(i, j, item)
        except Exception as e:
            QMessageBox.critical(self, "Error", f"Error: {e}")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = EtxReader()
    window.show()
    sys.exit(app.exec_())

编写 readEtx.ui 如下

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>ExcelReader</class>
 <widget class="QMainWindow" name="ExcelReader">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Excel Reader</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QLabel" name="file_path_label">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>20</y>
      <width>111</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>Excel File:</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="file_path_line_edit">
    <property name="geometry">
     <rect>
      <x>110</x>
      <y>20</y>
      <width>431</width>
      <height>22</height>
     </rect>
    </property>
    <property name="readOnly">
     <bool>true</bool>
    </property>
   </widget>
   <widget class="QPushButton" name="browse_btn">
    <property name="geometry">
     <rect>
      <x>570</x>
      <y>20</y>
      <width>75</width>
      <height>23</height>
     </rect>
    </property>
    <property name="text">
     <string>Browse</string>
    </property>
   </widget>
   <widget class="QPushButton" name="read_btn">
    <property name="geometry">
     <rect>
      <x>670</x>
      <y>20</y>
      <width>75</width>
      <height>23</height>
     </rect>
    </property>
    <property name="text">
     <string>Read</string>
    </property>
   </widget>
   <widget class="QTableWidget" name="table_widget">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>60</y>
      <width>781</width>
      <height>501</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

运行 python pyqt5_read_etx.py

相关推荐
reasonsummer9 小时前
【办公类110-05】20260807园园通小班“待补充”户籍地址自动修改(Python+EXCEL)
开发语言·python·excel
qq834431011 小时前
一款纯前端的excel控件,XuY_Sheet 电子表格组件教程
前端·excel·教程·luckysheet·xuy_sheet控件·前端表格控件
开开心心就好13 小时前
免费压缩软件WinRAR无弹窗、广告干扰
java·开发语言·前端·数据库·python·excel·winrar
AI导出鸭1 天前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
菜冻鱼2 天前
Python-pandas-索引与筛选
开发语言·笔记·python·numpy·pandas·学习方法
yanweijie03172 天前
Pandas 完整数据分析工作流实战(标准 5 步流程)
数据挖掘·数据分析·pandas
xiaopai9452 天前
工程项目管理系统选型:WPS/Excel为何难以替代专业系统的数据关联逻辑
excel·wps·项目管理系统·建米软件
灵析表格3 天前
Excel连接MySQL的函数化革命:灵析表格MySQL函数族业务应用分析
数据库·mysql·adb·excel·wps·灵析表格·excel公式盒子
许彰午3 天前
在PowerBuilder里手写Excel导出——OLE控制Excel的完整方案
excel
小趴蔡ha3 天前
04 Pandas 数据清洗实战:从表格读取到机器学习特征准备
人工智能·机器学习·pandas