You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Dash Plotly与Pandas实现Excel文件下拉选择功能

实现Dash下拉菜单自动加载文件夹内XLSX文件并切换DataFrame

以下是完整的实现代码,支持自动识别新增XLSX文件、通过下拉菜单选择文件并实时展示对应数据:

import dash
from dash import dcc, html, Input, Output, dash_table
import pandas as pd
import os
import glob

# 初始化Dash应用
app = dash.Dash(__name__)

# 定义页面布局
app.layout = html.Div([
    # 文件选择下拉菜单
    dcc.Dropdown(
        id='xlsx-file-selector',
        options=[],
        placeholder="选择一个XLSX文件",
        style={'width': '50%', 'margin': '20px 0'}
    ),
    # 数据展示表格
    dash_table.DataTable(
        id='data-table',
        page_size=10,
        style_table={'overflowX': 'auto'},
        style_cell={'textAlign': 'left'}
    ),
    # 定时刷新文件列表(可选,30秒刷新一次)
    dcc.Interval(
        id='interval-component',
        interval=30*1000,
        n_intervals=0
    )
])

# 回调:定时更新下拉菜单的文件列表
@app.callback(
    Output('xlsx-file-selector', 'options'),
    Input('interval-component', 'n_intervals')
)
def refresh_file_list(_):
    # 扫描当前目录下的所有XLSX文件
    current_path = os.getcwd()
    xlsx_files = glob.glob(os.path.join(current_path, "*.xlsx"))
    # 生成下拉选项:显示文件名,存储文件完整路径
    return [{'label': os.path.basename(file), 'value': file} for file in xlsx_files]

# 回调:根据选中的文件加载并展示数据
@app.callback(
    [Output('data-table', 'data'),
     Output('data-table', 'columns')],
    Input('xlsx-file-selector', 'value')
)
def load_selected_xlsx(file_path):
    if not file_path:
        return [], []
    # 读取选中的Excel文件
    df = pd.read_excel(file_path)
    # 转换为Dash表格兼容格式
    return df.to_dict('records'), [{'name': col, 'id': col} for col in df.columns]

if __name__ == '__main__':
    app.run_server(debug=True)

关键功能说明

  • 自动识别新增文件:通过dcc.Interval组件定时触发文件扫描回调,无需修改代码或重启服务,新增的XLSX文件会自动出现在下拉菜单中。
  • 按需加载数据:不再提前把所有文件读入内存,仅在用户选中文件时才读取对应数据,节省内存资源。
  • 友好的交互体验:下拉菜单显示文件名而非完整路径,用户更易识别;无文件选中时展示空表格,避免报错。

原代码的优化点

原代码提前批量读取所有文件到列表的方式,既占用内存又无法实时更新文件列表。改为按需读取+定时扫描的模式后,既解决了动态文件识别问题,又提升了运行效率。

内容的提问来源于stack exchange,提问作者requiem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:25:16