hynet1024 发表于 2023-5-22 21:50:34

求助Excel预览问题

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

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

(图片只是设想的界面,不知道怎么写代码)

sfqxx 发表于 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行数据。您可以根据需要对代码进行修改,以适应您的具体需求。

isdkz 发表于 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


这个例子只是一个基本的起点,你可以根据你的需求对其进行扩展。例如,你可以添加更多的菜单项来执行其他操作,或者你可以添加更多的控件来显示其他信息。

hynet1024 发表于 2023-5-22 22:09:09

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

感谢大神赐教。有一个不甚完美的地方,就是预览的Excel文件格式不那么好看,能不能像原表格那样显示呢?

isdkz 发表于 2023-5-22 22:30:48

本帖最后由 isdkz 于 2023-5-22 22:34 编辑

hynet1024 发表于 2023-5-22 22:09
感谢大神赐教。有一个不甚完美的地方,就是预览的Excel文件格式不那么好看,能不能像原表格那样显示呢?

暂时只能这样了,没有研究出更好的方案{:10_277:}:

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()


sfqxx 发表于 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()))
            

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

这样就可以让预览的Excel文件格式更加美观,接近原表格。您可以根据需要进一步调整表格样式。

hynet1024 发表于 2023-5-23 16:03:05

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

1. 首先导入 ...

感谢指点!
页: [1]
查看完整版本: 求助Excel预览问题