• 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 如下

    1. # -*- coding: utf-8 -*-
    2. """ openpyxl 读取.xlsx文件,显示在 wx.grid 表格中 """
    3. import os
    4. import sys
    5. import datetime
    6. import openpyxl
    7. import wx
    8. import wx.grid
    9. class MyFrame(wx.Frame):
    10. def __init__(self):
    11. super().__init__(parent=None, title='openpyxl show on wx.grid', size=(1000,600))
    12. panel = wx.Panel(self)
    13. # 选择.xlsx文件名
    14. fileFilter = "Excel Files (*.xlsx)|*.xlsx"
    15. fileDialog = wx.FileDialog(self, message="选择xlsx文件", wildcard=fileFilter, style=wx.FD_OPEN)
    16. dialogResult = fileDialog.ShowModal()
    17. if dialogResult != wx.ID_OK:
    18. return
    19. filename = fileDialog.GetPath()
    20. if not os.path.exists(filename):
    21. print(f'Error: {filename} not found.')
    22. sys.exit(2)
    23. # Read Excel file
    24. book = openpyxl.load_workbook(filename, data_only=True)
    25. #sheet = book['Sheet1']
    26. sheet = book.active
    27. nrows = sheet.max_row # 取最大行数
    28. if nrows > 10000:
    29. print(f" 行数: {nrows} > 10000 !")
    30. nrows = 10000
    31. ncols = sheet.max_column # 取最大列数
    32. if ncols > 26:
    33. print(f" columns: {ncols} > 26 !")
    34. ncols = 26
    35. # 创建一个表格
    36. self.grid = wx.grid.Grid(panel)
    37. self.grid.CreateGrid(nrows, ncols) # 创建一个 nrows行 ncols列的表格
    38. # 设置表格的列标题
    39. cols = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    40. for j in range(0, ncols):
    41. self.grid.SetColLabelValue(j, cols[j])
    42. # 设置表格的行标题
    43. for i in range(0, nrows):
    44. self.grid.SetRowLabelValue(i, str(i+1))
    45. # 向表格中添加数据
    46. for i in range(0, nrows):
    47. for j in range(0, ncols):
    48. cell = sheet.cell(row=i+1,column=j+1)
    49. v = cell.value
    50. t = cell.data_type
    51. if v is None:
    52. self.grid.SetCellValue(i,j, '')
    53. elif t in ('s','t'): # str, text
    54. self.grid.SetCellValue(i,j, v)
    55. elif t =='n': # number
    56. if v%1 ==0: # int
    57. self.grid.SetCellValue(i,j, "%d" %v)
    58. else: # float
    59. self.grid.SetCellValue(i,j, "%.4f" %v)
    60. elif t =='d': # date
    61. self.grid.SetCellValue(i,j, v.strftime('%Y-%m-%d'))
    62. else:
    63. self.grid.SetCellValue(i,j, str(v))
    64. # 使用 sizer 来管理布局
    65. sizer = wx.BoxSizer(wx.VERTICAL)
    66. sizer.Add(self.grid, 1, wx.EXPAND | wx.ALL, 5)
    67. panel.SetSizer(sizer)
    68. if __name__ == '__main__':
    69. app = wx.App()
    70. frame = MyFrame()
    71. frame.Show(True)
    72. 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 就是公式计算的结果了。

  • 相关阅读:
    刷题-多数元素-C++/python-hash/排序/多数投票算法/分治
    JavaScript-jQuery
    461. 汉明距离
    mvc基于ASP NET大学生校园招聘网站的C#设计与开发
    网站收录查询-批量网站收录查询软件
    Gartner发布2022年新兴技术成熟度曲线,推动沉浸式、AI自动化发展
    Ubtuntu 安装中州(rime)输入法
    OpenFeign源码1-环境搭建及核心类说明
    【登录问题:拦截器和过滤器的应用】
    关联通达信自动化交易接口的代码分享
  • 原文地址:https://blog.csdn.net/belldeep/article/details/133579581