pyqt5:openpyxl 读取 Excel文件,显示在 QTableWidget 中

5 篇文章 0 订阅

pip install openpyxl
openpyxl-3.1.2-py2.py3-none-any.whl (249 kB)
et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB)
摘要:A Python library to read/write Excel 2010 xlsx/xlsm files

pip install pyqt5; 
pip install pyqt5-tools; 

编写 openpyxl_pyqt5.py 如下

# -*- coding: utf-8 -*-
import os
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem
from openpyxl import load_workbook

class ExcelReader(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置窗口属性
        self.setWindowTitle("Excel Reader")
        self.setGeometry(100, 100, 800, 600)

        # 选择.xlsx文件名
        file_name, _ = QFileDialog.getOpenFileName(self, "Open Excel File", "", "xlsx Files (*.xlsx)")
        if file_name:
            self.file_path = file_name
        else:
            sys.exit(1)
        if not os.path.exists(self.file_path):
            print(f'Error: {self.file_path} not found.')
            sys.exit(2)
    
        # 加载Excel文件
        book = load_workbook(filename=self.file_path)
        sheet = book.active
        nrows = sheet.max_row    # 取最大行数
        ncols = sheet.max_column # 取最大列数
        if ncols > 26:
            print(f" columns: {ncols} > 26 !")
            ncols = 26

        # 创建表格控件
        self.table = QTableWidget()
        self.table.setRowCount(nrows) # 设置行数
        self.table.setColumnCount(ncols)  # 设置列数
        headers = tuple("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
        self.table.setHorizontalHeaderLabels(headers[0:ncols])
        self.setCentralWidget(self.table)

        # 遍历Excel数据并插入到表格控件中
        row = 0
        for row_data in sheet.iter_rows():
            col = 0
            for cell in row_data:
                v = cell.value
                t = cell.data_type
                if v is None:
                    item = QTableWidgetItem('')
                elif t in ('s','t'): # str, text
                    item = QTableWidgetItem(v)
                elif t =='n': # number
                    if v%1 ==0: # int
                        item = QTableWidgetItem("%d" %v)
                    else: # float
                        item = QTableWidgetItem("%.4f" %v)
                elif t =='d': # date
                    item = QTableWidgetItem(v.strftime('%Y-%m-%d'))
                else:
                    item = QTableWidgetItem(str(v))
                self.table.setItem(row, col, item)
                col += 1
            row += 1
        #

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

运行 python openpyxl_pyqt5.py 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值