Daten in eine Excel-Arbeitsmappe schreiben

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Weil es immer wieder gefragt wird... ;-)

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
Werte in eine Excel-Arbeitsmappe schreiben

Requirements:  Python: http://www.python.org/
               pywin32: http://sourceforge.net/projects/pywin32/
"""
 
import datetime
import win32com.client


fieldnames = (u"Vorname", u"Nachname", u"Geburtstag")
values = (
    (u"Max", u"Mustermann", datetime.date(1974, 8, 18)),
    (u"Leo", u"Mustermann", datetime.date(1974, 8, 19)),
    (u"Maria", u"Musterfrau", datetime.date(1974, 8, 20)),
)

# Werte vermehren -- zum Testen
values = 10 * values

# Verbindung zu Excel aufnehmen
app = win32com.client.dynamic.Dispatch("Excel.Application")

# Neue Arbeitsmappe
workbook = app.Workbooks.Add()

# Neues Arbeitsblatt
worksheet = workbook.Worksheets.Add()
worksheet.Name = "Adressen"

# Hinweis: Cells-Syntax: Cells(row_id, col_id)

# Feldnamen schreiben (und fett formatieren)
for index, fieldname in enumerate(fieldnames):
    worksheet.Cells(1, (index + 1)).Value = fieldname
    worksheet.Cells(1, (index + 1)).Font.Bold = True

# Feldwerte schreiben
for index, (vorname, nachname, geburtstag) in enumerate(values):
    worksheet.Cells(index + 2, 1).Value = vorname
    worksheet.Cells(index + 2, 2).Value = nachname
    worksheet.Cells(index + 2, 3).Value = geburtstag

# Bereichsnamen vergeben
cells = worksheet.Range("A1", worksheet.Cells(len(values) + 1, len(fieldnames)))
cells.Name = "Adressen"

# Workbook speichern und schließen
workbook.SaveAs(u"test.xls")
workbook.Close()

# Excel anzeigen
#app.visible = True

# Excel schließen
app.Quit()

# Objekte in der richtigen Reihenfolge löschen
del worksheet
del workbook
del app
Hiermit lassen sich leicht ein paar Werte in eine Excel-Arbeitsmappe schreiben. Allerdings wird es ziemlich langsam, wenn viele Werte geschrieben werden sollen.

mfg
Gerold
:-)

Stichworte: Excel Arbeitsmappe Arbeitsblatt Workbook Worksheet pywin32 win32com dispatch
Zuletzt geändert von gerold am Dienstag 10. April 2007, 13:07, insgesamt 2-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Schnellere, aber auch kompliziertere Version: http://www.python-forum.de/topic-10137.html
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Und hier die ganz schnelle Version (Dank sunmountain):

Code: Alles auswählen

...
# Feldnamen schreiben (und fett formatieren)
for index, fieldname in enumerate(fieldnames):
    worksheet.Cells(1, (index + 1)).Value = fieldname
    worksheet.Cells(1, (index + 1)).Font.Bold = True

# Feldwerte in Arbeitsblatt schreiben (alles in einem Rutsch; deshalb schnell)
cells = worksheet.Range("A2", worksheet.Cells(len(values) + 1, len(fieldnames)))
cells.Value = values

# Bereichsnamen vergeben
cells = worksheet.Range("A1", worksheet.Cells(len(values) + 1, len(fieldnames)))
cells.Name = "Adressen"
...
mfg
Gerold
:-)

Edit: Code ausgebessert (Groß-/Kleinschreibung)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten