Seite 1 von 1

openpyxl, xlsx zu einer csv umwandeln

Verfasst: Dienstag 19. Dezember 2017, 13:34
von BaseFloor
Hallo,

ich bin Neuling bei openpyxl und möchte eine xlsx-Datei zu einer CSV umwandeln.
Wie würde man da vorgehen ?

Re: openpyxl, xlsx zu einer csv umwandeln

Verfasst: Dienstag 19. Dezember 2017, 14:04
von Sirius3
@BaseFloor: man öffnet die Datei, wählt das Sheet und schreibt die Zellen mit csv.writer in eine csv-Datei.

Re: openpyxl, xlsx zu einer csv umwandeln

Verfasst: Dienstag 19. Dezember 2017, 15:59
von BaseFloor
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 ?

Re: openpyxl, xlsx zu einer csv umwandeln

Verfasst: Dienstag 19. Dezember 2017, 16:13
von Sirius3
@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.

Re: openpyxl, xlsx zu einer csv umwandeln

Verfasst: Dienstag 19. Dezember 2017, 16:28
von BaseFloor

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.

Re: openpyxl, xlsx zu einer csv umwandeln

Verfasst: Dienstag 19. Dezember 2017, 16:42
von __deets__
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.

Re: openpyxl, xlsx zu einer csv umwandeln

Verfasst: Dienstag 19. Dezember 2017, 21:17
von narpfel
@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.