Die Tabelle wird korrekt angezeigt, aber wenn ich auf die Schaltfläche „Tabelle kopieren“ klicke, wird tatsächlich nichts in die Zwischenablage kopiert – obwohl die Meldung „Tabelle kopiert“ angezeigt wird.
Hier ist eine vereinfachte Version meines Codes:
Code: Select all
from dash import Dash, html, dash_table, dcc, Input, Output, State
import pandas as pd
app = Dash(__name__)
app.layout = html.Div([
html.Button("Copy table", id="copy_btn", n_clicks=0, className="btn btn-primary"),
dcc.Clipboard(id="clipboard_table", style={"display": "none"}),
html.Div(id="message_copy", style={"color": "green"}),
dash_table.DataTable(
id="sales_table",
columns=[
{"name": "Department", "id": "department"},
{"name": "Sales", "id": "sales"},
{"name": "Weight", "id": "weight"},
],
data=[
{"department": "Phones", "sales": 1000, "weight": "55.8%"},
{"department": "Computers", "sales": 600, "weight": "26.1%"},
],
style_table={'overflowX': 'auto'},
)
])
@app.callback(
Output("clipboard_table", "content"),
Output("message_copy", "children"),
Input("copy_btn", "n_clicks"),
State("sales_table", "data"),
prevent_initial_call=True
)
def copy_table(n_clicks, data):
if not data:
return "", "⚠️ No data to copy"
df = pd.DataFrame(data)
text = df.to_csv(sep="\t", index=False)
return text, "✅ Table copied. You can paste it in Excel (Ctrl+V)"
if __name__ == "__main__":
app.run_server(debug=True)
Verwendung von dcc.Clipboard() wie in den Dash-Dokumenten gezeigt.
Injizieren von JavaScript mit html.Script() zur Verwendung von navigator.clipboard.writeText(text) – aber das wird bei der Bereitstellung nicht ausgeführt (Blöcke inline rendern). Skripte).
Gibt es eine empfohlene oder sichere Dash-native Möglichkeit, dies zu tun, insbesondere wenn die App bereitgestellt wird (z. B. auf Render oder Heroku)?
Mobile version