wxpython:wx.grid 表格显示 Excel xlsx文件

pip install xlrd

xlrd-1.2.0-py2.py3-none-any.whl (103 kB)

摘要: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files

pip install wxpython==4.2

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

Successfully installed wxpython-4.2.0

编写 wx_grid_xlsx.py 如下

python 复制代码
# -*- coding: utf-8 -*-
""" wx.grid 表格显示 Excel xlsx文件 """
import os
import sys
import datetime
import xlrd
import wx  
import wx.grid  
  
class MyFrame(wx.Frame):
 
    def __init__(self):  
        super().__init__(parent=None, title='wx.grid view xlsx ', size=(1000,600))
        panel = wx.Panel(self)  

        # 选择.xlsx文件名
        fileFilter = "xlsx Files (*.xlsx)|*.xlsx|" "Excel files (*.xls)|*.xls"
        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)

        book = xlrd.open_workbook(filename)
        sheetname = "Sheet1"
        sheet = book.sheet_by_name(sheetname)

        nrows = sheet.nrows  # 获取sheet中的有效行数
        if nrows > 10000:
            print(f" 行数: {nrows} > 10000 !")
            nrows = 10000
        ncols = sheet.ncols  # 获取sheet中的有效列数
        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))  

        #单元类型cell_type: 0.empty, 1.string, 2.number, 3.date, 4.boolean, 5.error, 6.blank
        # 向表格中添加数据
        for i in range(0, nrows):
            for j in range(0, ncols):
                v = sheet.cell_value(i,j)
                t = sheet.cell_type(i,j)
                if t ==0:
                    self.grid.SetCellValue(i,j, '')
                elif t ==1:
                    self.grid.SetCellValue(i,j, v)
                elif t ==2:
                    if v%1 ==0:
                        self.grid.SetCellValue(i,j, "%d" %v)
                    else:
                        self.grid.SetCellValue(i,j, "%.4f" %v)
                elif t ==3:
                    date_tuple = xlrd.xldate_as_tuple(v, book.datemode)
                    date_v = datetime.date(*date_tuple[:3])
                    self.grid.SetCellValue(i,j, date_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(False)  
    frame = MyFrame()
    frame.Show(True)    
    app.MainLoop()

运行 python wx_grid_xlsx.py

参考了百度:文心一言:示例 wx_grid_demo.py

python 复制代码
import wx  
import wx.grid  
  
class MyFrame(wx.Frame):  
    def __init__(self):  
        super().__init__(parent=None, title='Grid Example')  
        panel = wx.Panel(self)  
  
        # 创建一个表格  
        self.grid = wx.grid.Grid(panel)  
        self.grid.CreateGrid(5, 3)  # 创建一个 5 行 3 列的表格  
  
        # 设置表格的列标题  
        self.grid.SetColLabelValue(0, "Column A")  
        self.grid.SetColLabelValue(1, "Column B")  
        self.grid.SetColLabelValue(2, "Column C")  
  
        # 设置表格的行标题  
        self.grid.SetRowLabelValue(0, "Row 1")  
        self.grid.SetRowLabelValue(1, "Row 2")  
        self.grid.SetRowLabelValue(2, "Row 3")  
  
        # 向表格中添加数据  
        self.grid.SetCellValue(0, 0, "Data 1-1")  
        self.grid.SetCellValue(0, 1, "Data 1-2")  
        self.grid.SetCellValue(0, 2, "Data 1-3")  
        self.grid.SetCellValue(1, 0, "Data 2-1")  
        self.grid.SetCellValue(1, 1, "Data 2-2")  
        self.grid.SetCellValue(1, 2, "Data 2-3")  
  
        # 使用 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()    
    app.MainLoop()
相关推荐
不吃鱼的羊10 小时前
Excel生成DBC脚本源文件
服务器·网络·excel
chenchihwen10 小时前
数据分析时的json to excel 转换的好用小工具
数据分析·json·excel
lxxxxl12 小时前
C#调用OpenXml,读取excel行数据,遇到空单元跳过现象处理
excel
m0_7482463513 小时前
前端通过new Blob下载文档流(下载zip或excel)
前端·excel
不吃鱼不吃鱼1 天前
Excel加载项入门:原理、安装卸载流程与常见问题
excel·wps
深耕AI1 天前
在Excel中绘制ActiveX控件:解决文本编辑框定位问题
java·前端·excel
五VV1 天前
Note2024122001_Excel按成绩排名
excel
Eiceblue1 天前
Python拆分Excel - 将工作簿或工作表拆分为多个文件
开发语言·python·excel
Excel_easy1 天前
批量生成二维码,助力数字化管理-Excel易用宝
excel·wps