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 如下
- # -*- 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 就是公式计算的结果了。