openpyxl, xlsx zu einer csv umwandeln

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
BaseFloor
User
Beiträge: 25
Registriert: Donnerstag 16. November 2017, 11:06

Hallo,

ich bin Neuling bei openpyxl und möchte eine xlsx-Datei zu einer CSV umwandeln.
Wie würde man da vorgehen ?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@BaseFloor: man öffnet die Datei, wählt das Sheet und schreibt die Zellen mit csv.writer in eine csv-Datei.
BaseFloor
User
Beiträge: 25
Registriert: Donnerstag 16. November 2017, 11:06

Das hört sich gut an Danke.
Mein einziges Problem ist nur noch, dass ich das sheet falsch aufrufe:

Code: Alles auswählen

import os
import openpyxl

xp = 'C:\\Users\\mn\\Desktop\\example.xlsx'
cp = 'C:\\Users\\mn\\Desktop\\example.csv'
wb = openpyxl.load_workbook(xp)
ws = wb.active

csv_arr = []
csv_file = open(cp,'w')
for row in ws:
    csv_arr.append(row)
    csv_file.write(str(row))

csv_file.close()
In der neuen Datei example.csv sollten eig die Werte stehen, doch wird folgendes einfach reingeschrieben:

(<Cell 'Tabelle1'.A1>, <Cell 'Tabelle1'.B1>,
<Cell 'Tabelle1'.C1>, <Cell 'Tabelle1'.D1>
, <Cell 'Tabelle1'.E1>)(<Cell 'Tabelle1'.A2>,
<Cell 'Tabelle1'.B2>, <Cell 'Tabelle1'.C2>, <Cell
'Tabelle1'.D2>, <Cell 'Tabelle1'.E2>)(<Cell 'Tabell
e1'.A3>, <Cell 'Tabelle1'.B3>, <Cell 'Tabelle1'.C3>,
<Cell 'Tabelle1'.D3>)

Wie deklariere ich ws so, dass ich alles aus dem sheet aufrufe ?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@BaseFloor: Du willst die Werte der Zellen haben (value). Du willst zum Schreiben das csv-Modul verwenden und Dateien mit dem with-Statement öffnen. csv_arr wird gar nicht verwendet. Verwende aussagekräftigere Namen statt xp oder cp.
BaseFloor
User
Beiträge: 25
Registriert: Donnerstag 16. November 2017, 11:06

Code: Alles auswählen

import csv
start_time = time.clock()
import os
import openpyxl

xlsx_path = 'C:\\Users\\nounh\\Desktop\\example.xlsx'
csv_path = 'C:\\Users\\nounh\\Desktop\\example.csv'

wb = openpyxl.load_workbook(xlsx_path)
ws = wb.active

csv_arr = []
csv_file = open(cp,'w')

for row in ws:
    csv_arr.append(row)
    csv_file.write(str(row))

csv_file.close()
xp = xlsx-Pfad
cp = csv-Pfad

Der csv_arr wird im for-lo doch verwendet. In diesen Array möchte ich die Werte des xlsx-sheets einfügen und dann als csv konvertieren.
Die Konvertierung gelingt. Doch es werden die oben gezeigten Werte in den Array übertragen.

Meine Frage ist wie ich ws deklarieren soll um einfach das ganze sheet aufzurufen.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du befühlst das Array zwar, aber benutzt es danach nicht.

Du musst über eine Zeile laufen & value auf jedem Objekt aufrufen. Und das Ergebnis in einer neuen Liste speichern. Und DIE übergibst du an den csv writer.

Statt Variablen kryptisch zu benennen & die dann uns oder dir in 3 Wochen erklären zu müssen, benenn sie gleich richtig.
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

@BaseFloor: Wenn du sowieso schon `pandas` benutzt, dann kannst du die xlsx-Datei auch gleich mit `pd.read_excel` öffnen und mit `DataFrame.to_csv` speichern.
Antworten