鱼C论坛

 找回密码
 立即注册
查看: 2249|回复: 6

[已解决]求助Excel预览问题

[复制链接]
发表于 2023-5-22 21:50:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 hynet1024 于 2023-5-22 21:51 编辑

我想用Python做一个界面,通过资源管理器选择EXcel文件后,在指定的控件预览,请各路大神不吝赐教。

(图片只是设想的界面,不知道怎么写代码)
最佳答案
2023-5-22 22:31:07
hynet1024 发表于 2023-5-22 22:09
感谢大神赐教。有一个不甚完美的地方,就是预览的Excel文件格式不那么好看,能不能像原表格那样显示呢?

可以使用Pandas的`styling`功能,对表格进行美化,使其更接近原表格。具体实现方法如下:

1. 首先导入样式包:`from pandas.io.formats.style import Styler`
2. 在读取Excel数据后,创建一个Styler对象,并使用`.hide_index()`方法隐藏行索引
3. 调用`.set_table_styles()`方法设置表格样式,可以使用CSS样式或者dict格式来设置
4. 最后使用`.render()`方法将样式应用于表格并转化为HTML格式,再使用`.splitlines()`方法将HTML字符串分割为多行,并从第二行开始插入到Tkinter的Text组件中。

修改后的代码如下所示:

import tkinter as tk
from tkinter import filedialog
import pandas as pd
from pandas.io.formats.style import Styler

class ExcelPreviewer:
    def __init__(self, master):
        self.master = master
        master.title("Excel Previewer")
        
        # 创建文件选择器按钮
        self.select_button = tk.Button(master, text="选择Excel文件", command=self.select_file)
        self.select_button.pack(pady=10)
        
        # 创建文本框用于显示Excel数据
        self.text = tk.Text(master, height=20, width=80)
        self.text.pack()
    
    def select_file(self):
        # 弹出文件选择器对话框
        file_path = filedialog.askopenfilename(filetypes=[('Excel Files', '*.xlsx')])
        if file_path:
            # 使用Pandas读取Excel数据
            df = pd.read_excel(file_path)
            
            # 使用Styler美化表格
            styler = df.head(10).style.hide_index().set_table_styles([{
                'selector': 'th',
                'props': [
                    ('border', '1px solid black'),
                    ('background-color', 'lightgray'),
                    ('color', 'black')
                ]
            }, {
                'selector': 'td',
                'props': [
                    ('border', '1px solid black'),
                    ('padding', '5px')
                ]
            }])
            
            # 在文本框中显示美化后的表格
            self.text.delete(1.0, tk.END)
            self.text.insert(tk.END, '\n'.join(styler.render().splitlines()[1:]))
            

root = tk.Tk()
app = ExcelPreviewer(root)
root.mainloop()

这样就可以让预览的Excel文件格式更加美观,接近原表格。您可以根据需要进一步调整表格样式。
QQ图片20230522214954.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-22 21:55:46 | 显示全部楼层
您好!可以使用Python中的Tkinter模块来创建用户界面,使用Pandas来读取Excel文件。下面是一个简单的示例代码,它演示了如何选择Excel文件并在控件中预览数据:
import tkinter as tk
from tkinter import filedialog
import pandas as pd

class ExcelPreviewer:
    def __init__(self, master):
        self.master = master
        master.title("Excel Previewer")
        
        # 创建文件选择器按钮
        self.select_button = tk.Button(master, text="选择Excel文件", command=self.select_file)
        self.select_button.pack(pady=10)
        
        # 创建文本框用于显示Excel数据
        self.text = tk.Text(master, height=20, width=80)
        self.text.pack()
    
    def select_file(self):
        # 弹出文件选择器对话框
        file_path = filedialog.askopenfilename(filetypes=[('Excel Files', '*.xlsx')])
        if file_path:
            # 使用Pandas读取Excel数据
            df = pd.read_excel(file_path)
            
            # 在文本框中显示前10行数据
            self.text.delete(1.0, tk.END)
            self.text.insert(tk.END, df.head(10).to_string())
            

root = tk.Tk()
app = ExcelPreviewer(root)
root.mainloop()
这个程序创建了一个名为“Excel Previewer”的窗口,在窗口中有一个“选择Excel文件”的按钮和一个文本框。点击按钮后会弹出文件选择器对话框,用户可以选择Excel文件。选择完成后程序会使用Pandas读取Excel文件的内容,并在文本框中显示前10行数据。您可以根据需要对代码进行修改,以适应您的具体需求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-22 21:59:05 | 显示全部楼层
首先,为了预览Excel文件,你需要解析Excel文件。你可以使用开源库如 pandas 和 openpyxl 来读取和解析Excel文件。然后,你可以使用 Tkinter 或 PyQt 这样的图形用户界面(GUI)库来显示你解析的数据。

以下是一个基本的Tkinter和pandas结合的示例,你可以在这个基础上进行更多的定制和扩展:
import tkinter as tk
from tkinter import filedialog
from pandas import read_excel
import pandas as pd
from pandastable import Table, TableModel

def load_excel_data():
    file_path = filedialog.askopenfilename(filetypes=(("Excel files", "*.xlsx"), ("All files", "*.*") ))
    if file_path == '':
        return
    df = read_excel(file_path)
    update_table(df)

def update_table(df):
    table.model.df = df
    table.redraw()

root = tk.Tk()
main_frame = tk.Frame(root)
main_frame.pack(fill='both', expand=True)

table = Table(main_frame, dataframe=pd.DataFrame(), showtoolbar=True, showstatusbar=True)
table.show()

menu_bar = tk.Menu(root)
file_menu = tk.Menu(menu_bar)
menu_bar.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='Open', command=load_excel_data)
root.config(menu=menu_bar)

root.mainloop()

这段代码会创建一个窗口,窗口上方有一个菜单条,在菜单条中有一个“File”菜单。点击该菜单后会弹出一个文件对话框,让你选择一个Excel文件。选择文件后,会读取文件中的数据并在窗口中的表格中显示。

注意,这个例子使用了 pandastable 库来创建表格,这是一个可以在Tkinter界面中直接显示pandas数据框的库。

如果你的Python环境中没有 pandastable 库,你需要安装它。你可以在命令行中使用以下命令安装:
pip install pandastable

这个例子只是一个基本的起点,你可以根据你的需求对其进行扩展。例如,你可以添加更多的菜单项来执行其他操作,或者你可以添加更多的控件来显示其他信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-22 22:09:09 | 显示全部楼层
sfqxx 发表于 2023-5-22 21:55
您好!可以使用Python中的Tkinter模块来创建用户界面,使用Pandas来读取Excel文件。下面是一个简单的示例代 ...

感谢大神赐教。有一个不甚完美的地方,就是预览的Excel文件格式不那么好看,能不能像原表格那样显示呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-22 22:30:48 | 显示全部楼层
本帖最后由 isdkz 于 2023-5-22 22:34 编辑
hynet1024 发表于 2023-5-22 22:09
感谢大神赐教。有一个不甚完美的地方,就是预览的Excel文件格式不那么好看,能不能像原表格那样显示呢?


暂时只能这样了,没有研究出更好的方案
import tkinter as tk
from tkinter import filedialog
from pandas import read_excel
import pandas as pd
from pandastable import Table, TableModel

def browse_files():
    file_path = filedialog.askopenfilename(filetypes=(("Excel files", "*.xlsx"), ("All files", "*.*") ))
    if file_path == '':
        return
    file_path_entry.delete(0, tk.END)
    file_path_entry.insert(0, file_path)

def load_excel_data():
    file_path = file_path_entry.get()
    df = read_excel(file_path)
    update_table(df)

def update_table(df):
    table.model.df = df
    table.redraw()
    table.setFontsize(10)
    table.setFont('Calibri')
    table.autoResizeColumns()
    # Update table settings to make it look more like Excel
    table.columncolors = 'white'
    table.rowcolors = 'white'
    table.grid_color = '#BFBFBF'
    table.showGrid()

root = tk.Tk()

# create components
browse_button = tk.Button(root, text="选择Excel文件", command=browse_files)
file_path_entry = tk.Entry(root, width=50)
confirm_button = tk.Button(root, text="确定", command=load_excel_data)

# layout components
browse_button.grid(row=0, column=0)
file_path_entry.grid(row=0, column=1)
confirm_button.grid(row=0, column=2)

main_frame = tk.Frame(root)
main_frame.grid(row=1, column=0, columnspan=3)

table = Table(main_frame, dataframe=pd.DataFrame(), showtoolbar=True, showstatusbar=True)
table.show()

root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-22 22:31:07 | 显示全部楼层    本楼为最佳答案   
hynet1024 发表于 2023-5-22 22:09
感谢大神赐教。有一个不甚完美的地方,就是预览的Excel文件格式不那么好看,能不能像原表格那样显示呢?

可以使用Pandas的`styling`功能,对表格进行美化,使其更接近原表格。具体实现方法如下:

1. 首先导入样式包:`from pandas.io.formats.style import Styler`
2. 在读取Excel数据后,创建一个Styler对象,并使用`.hide_index()`方法隐藏行索引
3. 调用`.set_table_styles()`方法设置表格样式,可以使用CSS样式或者dict格式来设置
4. 最后使用`.render()`方法将样式应用于表格并转化为HTML格式,再使用`.splitlines()`方法将HTML字符串分割为多行,并从第二行开始插入到Tkinter的Text组件中。

修改后的代码如下所示:

import tkinter as tk
from tkinter import filedialog
import pandas as pd
from pandas.io.formats.style import Styler

class ExcelPreviewer:
    def __init__(self, master):
        self.master = master
        master.title("Excel Previewer")
        
        # 创建文件选择器按钮
        self.select_button = tk.Button(master, text="选择Excel文件", command=self.select_file)
        self.select_button.pack(pady=10)
        
        # 创建文本框用于显示Excel数据
        self.text = tk.Text(master, height=20, width=80)
        self.text.pack()
    
    def select_file(self):
        # 弹出文件选择器对话框
        file_path = filedialog.askopenfilename(filetypes=[('Excel Files', '*.xlsx')])
        if file_path:
            # 使用Pandas读取Excel数据
            df = pd.read_excel(file_path)
            
            # 使用Styler美化表格
            styler = df.head(10).style.hide_index().set_table_styles([{
                'selector': 'th',
                'props': [
                    ('border', '1px solid black'),
                    ('background-color', 'lightgray'),
                    ('color', 'black')
                ]
            }, {
                'selector': 'td',
                'props': [
                    ('border', '1px solid black'),
                    ('padding', '5px')
                ]
            }])
            
            # 在文本框中显示美化后的表格
            self.text.delete(1.0, tk.END)
            self.text.insert(tk.END, '\n'.join(styler.render().splitlines()[1:]))
            

root = tk.Tk()
app = ExcelPreviewer(root)
root.mainloop()

这样就可以让预览的Excel文件格式更加美观,接近原表格。您可以根据需要进一步调整表格样式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-23 16:03:05 | 显示全部楼层
sfqxx 发表于 2023-5-22 22:31
可以使用Pandas的`styling`功能,对表格进行美化,使其更接近原表格。具体实现方法如下:

1. 首先导入 ...

感谢指点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表