Seite 1 von 1

konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Donnerstag 11. Januar 2018, 14:18
von BaseFloor
Hi habe ich habe eine xlsx mit mehreren worksheets. Ich möchte jedes dieser worksheets zu einer csv knvertieren mittels openpyxl.
Der Dateiname der csv soll jeweils den des Sheets tragen.
Leider habe ich nur rausgefunden wie man das erste sogenannte 'active sheet' umwandelt:

Code: Alles auswählen

import openpyxl
import csv

wb = openpyxl.load_workbook('example.xlsx')
sh = wb.get_active_sheet()
f = open('example.csv', 'w')

c = csv.writer(f)
for r in sh.rows:
    c.writerow([cell.value for cell in r])
Kann mir jemand weiterhelfen ?

Re: konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Donnerstag 11. Januar 2018, 14:43
von kbr
@BaseFloor: wie sich durch googeln sofort herausfinden lässt, verfügt ein workbook über das Property 'sheetnames', sowie die Methode 'get_sheet_by_name'.

Re: konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Donnerstag 11. Januar 2018, 14:49
von noisefloor
Hallo,

ungetestet:

Code: Alles auswählen

import openpyxl
import csv
     
wb = openpyxl.load_workbook('example.xlsx')
for sheet in wb:
    with open('example_{}.csv'.format(sheet.title, 'w')) as f:
        c = csv.writer(f)
        for row in sheet.rows:
            c.writerow([cell.value for cell in row])
Wenn du bei Google nach "oppenpyxl iterate through sheets" findest du aber auch bergewweise Treffer dazu... Und im openpyxl Tutorial ist das auch erklärt: http://openpyxl.readthedocs.io/en/default/tutorial.html

Gruß, noisefloor

Re: konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Montag 15. Januar 2018, 10:39
von BaseFloor
noisefloor hat geschrieben:with open('example_{}.csv'.format(sheet.title, 'w')) as f:
Soll das wirklich so mit den geschwungenen klammern ?

Re: konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Montag 15. Januar 2018, 10:56
von narpfel
@BaseFloor: Das ist String Formatting. Die Dokumentation dazu sollte eigentlich beantworten, ob die Zeile so sinnvoll ist.

Re: konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Mittwoch 17. Januar 2018, 09:38
von BaseFloor
Ich habe inzwischen eine funktionierende Lösung selbst hinbekommen :)

Code: Alles auswählen

from openpyxl import load_workbook
import openpyxl
import csv

wb = load_workbook(filename='C:\\example.xlsx')

sheetnames = wb.get_sheet_names()
sheet_value_arr = []


for a in sheetnames:
    sheet = wb[a]
    with open('C:\\example_'+ a +'.csv', 'w') as f:
        c = csv.writer(f)
        for row in sheet.rows:
            sheet_value_arr.append([cell.value for cell in row])
            for r in sheet.rows:
                c.writerow([cell.value for cell in row])
f.close()

Re: konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Mittwoch 17. Januar 2018, 09:50
von noisefloor
Hallo,

gut :-) Das `f.close()` ist überflüssig, weil der Context Manager (`with ...`) die Datei automatisch schließt.

Gruß, noisefloor

Re: konvertieren aller sheets einer xlsx zu csv mittels python openpyxl

Verfasst: Mittwoch 17. Januar 2018, 11:13
von Sirius3
@BaseFloor: `sheet_value_arr` wird nicht wirklich gebraucht. `a` und `c` sind schlechte Variablennamen. Statt Strings mit + zusammenzustückeln, solltest Du .format verwenden. Ist es Absicht dass Du alle mehrfach schreibst? Glaub nicht, daher ist die Einrückung falsch.