python 编程查看 Excel 电子表(真香)

这篇博客介绍了如何使用 Python 的 pandas 库和 PySimpleGUI 模块,无须安装 Office 即可查看 Excel 文件。通过创建两个窗口,用户可以选择 Excel 文件并查看其所有 sheet 的名称,然后选择特定 sheet 显示表格内容。文章提供了完整的源代码,并详细解释了展示表格的 table_wd 函数的工作原理。

利用 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。这个程序里默认取表格的第一行作为表头。即使实际表头不在第一行,只要第一行不是数据,通常情况下是没有大碍的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值