Python, Excel Ausgabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JanR
User
Beiträge: 1
Registriert: Donnerstag 12. Juni 2025, 10:03

Hallo zusammen,

ich komme von der EXCEL/VBA Seite und habe mich an Python getraut. :-)
In 1 Woche konnte ich schon einiges erstellen. Leider habe ich ein Punkt, den ich nicht lösen kann.

Excel/Output.
mein Ergebnis von Python bekomme ich zwar in Excel, aber nicht wie ich will.
Ich habe einige Tabellen als print Ergebnis. Die sollen alle untereinander in Excel geschrieben werden.

z.B Tabelle1 soll in Zelle A1 starten, Tabelle2 ab Zelle A30. usw.
Einzelne Werte funktionieren, aber nicht als Tabelle. Für Tipps wäre ich dankbar.
df1 und df2 werden nicht angenommen und geben dort eine Fehlermeldung aus.

Gruß Jan

Code: Alles auswählen

datafinal = {'Land': DataTP2,
             'Liga': DataTP3,
             'T.Platz': DataTP,
             'Team': data001}

datafinal2 = {'Land': DataTP2,
             'Liga': DataTP3,
             'T.Platz': DataTP,
             'Team': data001}

df1 = pd.DataFrame(datafinal)
df2 = pd.DataFrame(datafinal2)

print(df1)
print(df2)

from openpyxl.workbook import Workbook

os.chdir(r'C:\Users\xxx\Desktop\Dateien')

from openpyxl import  workbook
TabelleFinal = Workbook.active
TabelleFinal['A1'] = (df1)
TabelleFinal['A30'] = (df2)
Exceldatei.save(('Tabellenplatz.xlsx'))
Benutzeravatar
Dennis89
User
Beiträge: 1547
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

wenn du schon `pandas`benutzt, dann gibt es eine `to_excel`- Methode:
https://pandas.pydata.org/pandas-docs/s ... excel.html

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Zeige immer den Code, den du tatsächlich ausführst zusammen mit der exakt zu dem Code passenden Fehlermeldung.
Wo wird im Code "pd" definiert?

Zum Code:
Importe gehören an den Anfang des Scripts. Nicht irgendwo versteckt darin.
Namen werden in Python klein_mit_unterstrich geschrieben. Ausgenommen sind die Namen von Klassen (PascalCase) und Konstanten (KOMPLETT_GROSS).
Warum versuchst du das Arbeitsverzeichnis zu wechseln? Das ist für den Benutzer unerwartet und unnötig.
Namensgebeung ist wichtig. Was ist "datafinal1" und warum muss man das durchnummerieren (wenn man anfängt Zahlen an Namen zu hängen ist das ein sicheres Anzeichen dafür, dass man eine Datenstruktur nutzen möchte). Und was ist dann df1? Ein datafinal mit weniger Buchstaben?

Woher hast du die Information, dass man Dataframes einfach so in Sheets platzieren klann?
Benutzeravatar
__blackjack__
User
Beiträge: 14044
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JanR: Zu den Pfaden vielleicht noch der Hinweis auf das `pathlib`-Modul aus der Standardbibliothek.

Dann ist `ExcelDatei` nirgends definiert. Und `Workbook.active` muss man von einem `Workbook`-Objekt abfragen, nicht von der Klasse.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Pedroski55
User
Beiträge: 6
Registriert: Freitag 25. Juli 2025, 00:20

Du hast aus Datensicherheitsgründen die Werte einige Daten nicht angegeben! Schlau!

Geht so, aber formatieren kann man besser wenn man das Resultat in Excel öffnet.

Formatieren in openpyxl ist möglich, aber für nur eine Tabelle umständlich.

Code: Alles auswählen

import pandas as pd

savepath = '/home/peterr/temp/result.xlsx'

# ohne weitere Angaben pd.DataFrame.from_dict(datafinal) erwartet eine Liste
datafinal = {'Land': ["DataTP2"],
             'Liga': ["DataTP3"],
             'T.Platz': ["DataTP"],
             'Team': ["data001"]}

datafinal2 = {'Land': ["DataTP2"],
             'Liga': ["DataTP3"],
             'T.Platz': ["DataTP"],
             'Team': ["data001"]}

df1 = pd.DataFrame.from_dict(datafinal)
df2 = pd.DataFrame.from_dict(datafinal2)
result = pd.concat([df1, df2], axis=0)
result = result.reset_index()
# index=False funktioniert nicht, muss ein Kommunikationsproblem sein
# zwischen Pandas und openpyxl
result.to_excel(savepath, index=False)
Viel Spaß!
LeanUnd
User
Beiträge: 2
Registriert: Mittwoch 16. Juli 2025, 10:09

Pedroski55 hat geschrieben: Montag 28. Juli 2025, 06:29 Du hast aus Datensicherheitsgründen die Werte einige Daten nicht angegeben! Schlau!

Geht so, aber formatieren kann man besser wenn man das Resultat in Excel öffnet.

Formatieren in openpyxl ist möglich, aber für nur eine Tabelle umständlich.

Code: Alles auswählen

import pandas as pd

savepath = '/home/peterr/temp/result.xlsx'

# ohne weitere Angaben pd.DataFrame.from_dict(datafinal) erwartet eine Liste
datafinal = {'Land': ["DataTP2"],
             'Liga': ["DataTP3"],
             'T.Platz': ["DataTP"],
             'Team': ["data001"]}

datafinal2 = {'Land': ["DataTP2"],
             'Liga': ["DataTP3"],
             'T.Platz': ["DataTP"],
             'Team': ["data001"]}

df1 = pd.DataFrame.from_dict(datafinal)
df2 = pd.DataFrame.from_dict(datafinal2)
result = pd.concat([df1, df2], axis=0)
result = result.reset_index()
# index=False funktioniert nicht, muss ein Kommunikationsproblem sein
# zwischen Pandas und openpyxl
result.to_excel(savepath, index=False)
Viel Spaß!
Gibt es eine Möglichkeit, Spaltenbreiten oder Autofilter auf einmal zu setzen, wenn ich mit to_excel() exportiere? Manchmal exportiere ich 20+ Zeilen aus soup-beta - alles bleibt zusammen.
Pedroski55
User
Beiträge: 6
Registriert: Freitag 25. Juli 2025, 00:20

Nicht daß ich wüßte!

pandas docs link

Vielleicht speichern .to_csv dann öffne mit Excel?

Bin mehr praktisch wie theoretisch veranlagt. Keiner Experte!

Falls du einen Datensatz hier beifügen willst, es macht mir Spaß, damit zu fummeln, bis das gewünschte Resultat herauskommt!

Kannst Spaltenbreite so setzen:

Code: Alles auswählen

sheet.column_dimensions['A'].width = 20
Es gibt auch:

Code: Alles auswählen

# finde die Breite, die du haben willst
cell = ws[‘A1’]

# nutze column.autofit() 
cell.column.autofit()
Antworten