当前位置: 首页 > news >正文

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

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_workbookclass 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_nameelse: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.activenrows = 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 = 0for row_data in sheet.iter_rows():col = 0for cell in row_data:v = cell.valuet = cell.data_typeif v is None:item = QTableWidgetItem('')elif t in ('s','t'): # str, textitem = QTableWidgetItem(v)elif t =='n': # numberif v%1 ==0: # intitem = QTableWidgetItem("%d" %v)else: # floatitem = QTableWidgetItem("%.4f" %v)elif t =='d': # dateitem = QTableWidgetItem(v.strftime('%Y-%m-%d'))else:item = QTableWidgetItem(str(v))self.table.setItem(row, col, item)col += 1row += 1#if __name__ == "__main__":app = QApplication(sys.argv)reader = ExcelReader()reader.show()sys.exit(app.exec_())

运行 python openpyxl_pyqt5.py 

http://www.lryc.cn/news/189289.html

相关文章:

  • 在RabbitMQ中使用新的MQTT 5.0功能
  • flinkcdc 体验
  • Kafka知识补充
  • 【MAC】升级 Mac os 后报错
  • LeetCode(力扣)416. 分割等和子集Python
  • Redis之缓存一致性
  • LeetCode-199-二叉树的右视图
  • 二叉树的最近公共祖先
  • C++ 补充 反向迭代器的实现
  • JVM第一讲:JVM相关知识体系详解+面试(P6熟练 P7精通)
  • 深度学习DAY3:FFNNLM前馈神经网络语言模型
  • JavaSE学习值之--String类
  • 【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题
  • 基于单片机的汽车智能仪表的设计
  • 【Docker 内核详解】namespace 资源隔离(一):进行 namespace API 操作的 4 种方式
  • 【技术研究】环境可控型原子力显微镜超高真空度精密控制解决方案
  • 【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
  • python经典百题之简单加密数据
  • 登陆认证权限控制(1)——从session到token认证的变迁 session的问题分析 + CSRF攻击的认识
  • 单点接地、多点接地、混合接地
  • 【C++初阶(一)】学习前言 命名空间与IO流
  • flask vue跨域问题
  • stm32(二十)IAP升级优化(双缓存,可恢复)
  • HDLbits:Exams/ece241 2013 q4
  • 什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?
  • Response Status Code 301、302
  • import { ref, onMounted, reactive } from ‘vue‘
  • 【TB作品】基于MSP430G2553单片机的超声波测距与报警系统,原理图,PCB
  • npm install报错
  • Flutter自定义model实体类