python:openpyxl 读取 Excel文件,显示在 wx.grid 表格中

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 wxpython==4.2

wxPython-4.2.0-cp37-cp37m-win_amd64.whl (18.0 MB)

摘要: Cross platform GUI toolkit for Python, "Phoenix" version

编写 openpyxl_wx_grid.py 如下

python 复制代码
# -*- coding: utf-8 -*-
""" openpyxl 读取.xlsx文件,显示在 wx.grid 表格中 """
import os
import sys
import datetime
import openpyxl
import wx
import wx.grid

class MyFrame(wx.Frame):

    def __init__(self):
        super().__init__(parent=None, title='openpyxl show on wx.grid', size=(1000,600))
        panel = wx.Panel(self)

        # 选择.xlsx文件名
        fileFilter = "Excel Files (*.xlsx)|*.xlsx"
        fileDialog = wx.FileDialog(self, message="选择xlsx文件", wildcard=fileFilter, style=wx.FD_OPEN)
        dialogResult = fileDialog.ShowModal()
        if dialogResult != wx.ID_OK:
            return
        filename = fileDialog.GetPath()
        if not os.path.exists(filename):
            print(f'Error: {filename} not found.')
            sys.exit(2)

        # Read Excel file
        book = openpyxl.load_workbook(filename, data_only=True)
        #sheet = book['Sheet1']
        sheet = book.active
        nrows = sheet.max_row    # 取最大行数
        if nrows > 10000:
            print(f" 行数: {nrows} > 10000 !")
            nrows = 10000
        ncols = sheet.max_column # 取最大列数
        if ncols > 26:
            print(f" columns: {ncols} > 26 !")
            ncols = 26

        # 创建一个表格
        self.grid = wx.grid.Grid(panel)
        self.grid.CreateGrid(nrows, ncols)  # 创建一个 nrows行 ncols列的表格

        # 设置表格的列标题
        cols = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        for j in range(0, ncols):
            self.grid.SetColLabelValue(j, cols[j])

        # 设置表格的行标题
        for i in range(0, nrows):
            self.grid.SetRowLabelValue(i, str(i+1))

        # 向表格中添加数据
        for i in range(0, nrows):
            for j in range(0, ncols):
                cell = sheet.cell(row=i+1,column=j+1)
                v = cell.value
                t = cell.data_type
                if v is None:
                    self.grid.SetCellValue(i,j, '')
                elif t in ('s','t'): # str, text
                    self.grid.SetCellValue(i,j, v)
                elif t =='n': # number
                    if v%1 ==0: # int
                        self.grid.SetCellValue(i,j, "%d" %v)
                    else: # float
                        self.grid.SetCellValue(i,j, "%.4f" %v)
                elif t =='d': # date
                    self.grid.SetCellValue(i,j, v.strftime('%Y-%m-%d'))
                else:
                    self.grid.SetCellValue(i,j, str(v))

        # 使用 sizer 来管理布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.grid, 1, wx.EXPAND | wx.ALL, 5)
        panel.SetSizer(sizer)


if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()

运行 python openpyxl_wx_grid.py

参考了百度:文心一言:openpyxl 示例

一、load_workbook( ) 除了参数 filename 外为还有一些有用的参数:

load_workbook(filename, read_only=False, keep_vba=False, data_only=False, keep_links=True, rich_text=False)

read_only:是否为只读模式,对于超大型文件,要提升效率有帮助

keep_vba :是否保留 vba 代码,即打开 Excel 文件时,开启并保留宏

data_only:是否将公式转换为结果,即包含公式的单元格,是否显示最近的计算结果

keep_links:是否保留外部链接

rich_text: 是否保留富文本

二、读取公式:

如果使用 load_workbook() 方法在无参数的情况下打开一个Excel文件,并读取某单元格的值;

如果这个单元格本身的内容是公式,那么读取到的就是公式;如果这个单元格本身的内容是一个值,那么读取到的就是一个值。

三、读取公式计算后产生的数值

必须使用 load_workbook() 方法的 data_only=True 参数,例如:

work_book = openpyxl.load_workbook('test.xlsx', data_only=True)

这时,再去读取带公式的单元格,读取的 value 就是公式计算的结果了。

相关推荐
咖啡续命又一天1 天前
python 自动化采集 ChromeDriver 安装
开发语言·python·自动化
松果集1 天前
【1】数据类型2
python
且慢.5891 天前
命令行的学习使用技巧
python
海琴烟Sunshine1 天前
leetcode 66.加一 python
python·算法·leetcode
罗橙7号1 天前
【pyTorch】关于PyTorch的高级索引机制理解
人工智能·pytorch·python
B站计算机毕业设计之家1 天前
智能监控项目:Python 多目标检测系统 目标检测 目标跟踪(YOLOv8+ByteTrack 监控/交通 源码+文档)✅
python·yolo·目标检测·目标跟踪·智慧交通·交通·多目标检测
江上月5131 天前
django与vue3的对接流程详解(下)
后端·python·django
nightunderblackcat1 天前
四大名著智能可视化推演平台
前端·网络·爬虫·python·状态模式
小蕾Java1 天前
PyCharm入门级详细使用手册(Python新手快速上手篇)
ide·python·pycharm
动能小子ohhh1 天前
AI智能体(Agent)大模型入门【9】--如何在pycharm等其他编译软件调用ocr工具【只写后端代码不演示】
人工智能·python·深度学习·机器学习·pycharm·ocr