Wie füge ich in Python eine Schaltfläche „In die Zwischenablage kopieren“ für eine Dash-Datentabelle hinzu?Python

Python-Programme
Anonymous
 Wie füge ich in Python eine Schaltfläche „In die Zwischenablage kopieren“ für eine Dash-Datentabelle hinzu?

Post by Anonymous »

Ich erstelle eine Dash-App in Python und versuche, eine Schaltfläche hinzuzufügen, mit der der Benutzer den Tabelleninhalt in die Zwischenablage kopieren kann, damit er ihn in Excel einfügen kann.
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)

Ich habe Folgendes versucht:
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)?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post