利用 pandas 打开 Excel 电子表,pysimplegui 的 Table 将表格展现给我们,这样就不需要安装 Office 就可以查看了。
这里设置了两个窗口,一个主窗口用函数 main_wd() 实现,它需要一个 list 作为参数,即工作目录中所有的 Excel 电子表的文件名(全名)。下面这两个语句已经自动帮你在工作目录筛选好了扩展名为 xls、xlsm、xlsx 的全部文件
files = listdir('./')
files = [val for val in files if re.search(r'\.xls[mx]?$', val)]
这是主窗口
你先点击想要查看的文件,它的底色会变黄。
然后点击“读文件”按钮。如果文件太大,则需要稍等片刻,会在“显示表格”的左边显示该文件的所有 sheet 的 name。

出现 sheet 名之后,你就可以选择你想要的打开的 sheet ,然后点击“显示表格”按钮。程序就会调用 table_wd 函数,把 sheet 表格里的内容展现给你。效果如图:

是不是十分方便?下面是程序的完整原代码
# -*- coding: utf-8 -*-
import PySimpleGUI as sg
import pandas as pd
from os import listdir
import re
# 程序名:查看excel.py
# 作 者:zyehh
# 日 期:2022-12-06
def main_wd(files):
sg.theme('DarkAmber') # 设置当前主题
layout = [ [sg.Text('测试:',key='_KEY_text'),sg.Button('关闭')],
[sg.Listbox(values=files,size=(30,6 if len(files) > 6 else len(files))),sg.Button('读文件')],
[sg.Listbox(values=[],size=(30,6 if len(files) > 6 else len(files)),key='_KEY_readsheets'),sg.Button('显示表格')] ]
return sg.Window('查看表格', layout, resizable=True, finalize=True)
def table_wd(table,headings,tb_name=""):
layout = [ [sg.Text(f'表名:{tb_name}',key='_KEY_tablename'),sg.Button('关闭')],
[sg.Table(values=table, headings=headings)] ]
return sg.Window('展示表格', layout, resizable=True, finalize=True)
if __name__ == '__main__':
files = listdir('./')
files = [val for val in files if re.search(r'\.xls[mx]?$', val)]
table_window = None
main_window = main_wd(files)
# 事件循环并获取输入值
while True:
window, event, values = sg.read_all_windows()
if event in (None, '关闭') and window == main_window:
break
if window == main_window and event == '读文件':
#print(values[0])
if [] == values[0]:
sg.popup('请点选文件!')
else:
sl_xls = values[0][0]
main_window['_KEY_text'](f'已读入:{sl_xls}')
#或 window['_KEY_text'].update(sl_xls)
sheet_n_s = pd.read_excel(sl_xls, sheet_name=None)
main_window['_KEY_readsheets'].update(list(sheet_n_s))
if window == main_window and event == '显示表格':
#print(values)
if [] == values['_KEY_readsheets']:
sg.popup('请点选表格!')
else:
df = pd.read_excel(sl_xls, sheet_name=values['_KEY_readsheets'][0])
main_window.hide()
data = df.values.tolist()
header_list = df.columns.values.tolist()
table_window = table_wd(data,header_list,values['_KEY_readsheets'][0])
if window == table_window and event in (sg.WIN_CLOSED, '关闭'):
event = ''
table_window.close()
table_window = None
main_window.un_hide()
main_window.close()
这里再讲解一下 table_wd 函数。这个函数是用来展现表格的,它需要三个参数。
第一个参数是 tb_name ,即你选择的 sheetname。这个参数,你给不给它都是可以的。
第二个参数是 table 。这个参数需要一个 list类型的二维表格。所以把 dataframe 提交给它之前需要转化为 list,即:data = df.values.tolist()。
第三个参数是 headings ,也是需要一个一维的 list。这个程序里默认取表格的第一行作为表头。即使实际表头不在第一行,只要第一行不是数据,通常情况下是没有大碍的。
这篇博客介绍了如何使用 Python 的 pandas 库和 PySimpleGUI 模块,无须安装 Office 即可查看 Excel 文件。通过创建两个窗口,用户可以选择 Excel 文件并查看其所有 sheet 的名称,然后选择特定 sheet 显示表格内容。文章提供了完整的源代码,并详细解释了展示表格的 table_wd 函数的工作原理。
2989

被折叠的 条评论
为什么被折叠?



