Я новичок в Da sh и борюсь со всей помощью, которую я нашел в Интернете. Любой совет здесь полезен, пожалуйста! У меня есть таблица данных, которую я хочу загрузить с помощью кнопки на экране. Код загрузит файл, но он содержит HTML. Я прочитал это , но не знаю, как добавить @app.server.route
в свой код. Когда я прочитал об этом, мне кажется, что серверный маршрут предназначен для больших файлов? У меня всего пара сотен записей. Вот мой код:
import dash
import dash_table
import pandas as pd
#import data
df = pd.read_excel(r'C:\Users\abc\Documents\File.xlsm', sheet_name = "Data")
#clean up the data
new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header
app = dash.Dash(__name__)
app.layout = html.Div([
html.H3("Data"),
#horizontal rule
html.Hr(),
#download button
html.A(
html.Button('Download to Excel'),
id='excel-download',
download="data.csv",
href='',
target="_blank"
),
#add a space
html.P(),
#data table
dash_table.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in df.columns],
data=df.to_dict('records'),
#column headers fixed
#fixed_rows={'headers': True},
style_cell={
'minWidth': 95, 'maxWidth': 95, 'width': 95
},
#editable formatting
editable=True,
filter_action="native",
sort_action="native",
sort_mode="multi",
column_selectable="multi",
#row_selectable="multi",
#row_deletable=True,
selected_columns=[],
selected_rows=[],
page_action="native",
page_current= 0#,
#page_size= 10,
),
])
#style callback
@app.callback(
Output('datatable-interactivity', 'style_data_conditional'),
[Input('datatable-interactivity', 'selected_columns')]
)
#download callback https://community.plotly.com/t/download-raw-data/4700/7
@app.callback(
dash.dependencies.Output('excel-download', 'href'),
[dash.dependencies.Input('table', 'value')])
def update_download_link(filter_value):
dff = filter_data(filter_value)
csv_string = dff.to_csv(index=False, encoding='utf-8')
csv_string = "data:text/csv;charset=utf-8," + urllib.quote(csv_string)
return csv_string
def update_styles(selected_columns):
return [{
'if': { 'column_id': i },
'background_color': '#D2F3FF'
} for i in selected_columns]
if __name__ == '__main__':
app.run_server(debug=False, port=5554)
Я не понимаю, как работает строка [dash.dependencies.Input('table', 'value')])
для раздела 'value'
. В моем коде нет никакой ценности, как в найденных мною примерах. Я также попытался использовать там «данные», чтобы соответствовать ссылке на данные в DataTable (), но результаты были такими же. Я получаю файл Excel с выводом HTML, а не df.