[Excel-Export] Excel-Export aus Python

Du hast eine Idee für ein Projekt?
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Für Perl gibt es ein Modul namens Spreadsheet::WriteExcel, mit dem man aus Python direkt Excel-Dateien erstellen kann.

Ich habe zwar keine Zeit so ein Projekt hauptsächlich mitzugestalten, würde aber ein solches Modul sehr begrüßen. :P

Man könnte das Perl-Modul in Python nachbauen. Oder kennt jemand eine einfache Möglichkeit, Perl und Python irgendwie zu verheiraten?

Edit (Leonidas): Topic verändert und verschoben.
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Hmm, gute Frage. Scheinbar ist da noch nichts vorhanden, um PYthon in Perl einzubetten oder umgekehrt. PHP und Java ist ja... Seltsam ;)

Aber so ein Modul könnte ich auch gebrauchen. Schade dass Excell bzw. Microsoft ihr Dateiformat ständig wechselt, und nicht auf XML aufbaut, denn dann wäre es schön einfach. Aber hat nichts mit dem Thema zu tun.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Ich habe mal gestöbert (langeweile) und das hier gefunden:

http://www.greytrout.com/spreadscript.html

ABER kostet was.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

piddon hat geschrieben:Ich habe mal gestöbert (langeweile) und das hier gefunden:

http://www.greytrout.com/spreadscript.html

ABER kostet was.
Die Beschreibung klingt ziemlich gut. Nur bevorzuge ich eben doch freie Software. Aber gut zu wissen, daß es sowas prinzipiell gibt. Danke!
Gast

Warum macht Ihr euch das Leben so schwer??? Python hat ein sehr gutes COM Interface Modul <<win32com.client>>.
Ueber dieses Modul koennt Ihr sehr einfach und elegant Excel & co. ansteuern... :)
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Diese Aussage ist richtig, nur nicht jeder verwendet Windows.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

...Schade dass Excell bzw. Microsoft ihr Dateiformat ständig wechselt, und nicht auf XML aufbaut, denn dann wäre es schön einfach. Aber hat nichts mit dem Thema zu tun...

Es ergibt sich aber evtl. ein anderer Ansatz: Gibt es einen Konverter von XML
nach Excel??? So haetten wir zwei Fliegen mit einer Klappe erschlagen... :wink:
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Stimmt. eigentlich langt doch auch ein Kovertieren von XML in CSV. Daraus zu Excell ist nicht wirklich ein Problem. Jedoch wird es natürlich aufwendiger, wenn man noch charts und verknüpfungen/Berechnungn hat. Da sehe ich noch ein richtig grosses Problem.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

piddon hat geschrieben:...Jedoch wird es natürlich aufwendiger, wenn man noch charts und verknüpfungen/Berechnungn hat. Da sehe ich noch ein richtig grosses Problem...
...irgendwie ein Perl Modul nachbauen gefaellt mir nicht....

Aber ich haette da eine lustige Idee:
Da ja COM und Excel hauptsaechlich auf Windows laufen :wink: , koennten wir ja das OpenOffice-Fomat ansteuern!!! Da sind wir Plattformunabhaengig und koennen den wirklich guten OpenOffice->Excel Konverter verwenden (da funktionieren auch Charts...). Ich bin in der Schnittstelle von OpenOffice nicht so drin, aber es kann glaube ich auch mit XML umgehen, wenn es nicht sogar
ganz darauf aufbaut...
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Ja, diese Idee hatte ich auch schonmal. Der Ansatz bei OpenOffice ist um einiges besser, denn das speichert, soweit ich informiert bin, in XML.

Convertieren kann es ja.

Auch ist man mit OpenOffice um einiges Plattformunabhängiger als mit MsOffice.

Ich werde mich mal in die Schnittstellen von OpenOffice einlesen. Das sollte doch eine machbare Hürde sein.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

piddon hat geschrieben:Ja, diese Idee hatte ich auch schonmal. Der Ansatz bei OpenOffice ist um einiges besser, denn das speichert, soweit ich informiert bin, in XML.
...
Ich werde mich mal in die Schnittstellen von OpenOffice einlesen. Das sollte doch eine machbare Hürde sein.
Als Linuxer und OpenOffice-Anwender finde ich das natürlich gut, aber ein Excel-File kann man eben jedem in die Hand drücken, und für ein OpenOffice-Dokument braucht man OpenOffice, um es in ein MS-Format zu wandeln, oder hat Microsdoft da inzwischen funktionierende Import-Filter?

Zum OpenOffice-Format: Das sind ZIP-Files, die jeweils mehrere XML-Dateien enthalten. Eine mit den Daten, eine mit den Formatierungen ...

Das sollte mit dem zipfile-Modul und ein bißchen XML zu lösen sein...
tom_S

Nun ja, ich kenne einige Leute, die mit nichts anderem als Excel etwas anfangen können (leider). Wenn ich denen etwas erzähle von CSV-Dateien, die sie ja recht problemlos in Excel laden könnten, sehe ich da nur ahnungslose Gesichter vor mir, gefolgt von einem halbstündigem Erklärungsversuch und dem anschließendem resignierendem Weg zurück zum Arbeitsplatz. Mit OpenOffice brauch ich da wohl gar nicht erst anfangen.
Und dabei geht es meist um sehr einfache Dinge: Excel-Tabellen - nicht mal Mappen - die zur Verfügung gestellt werden sollen. Keine komplizierten Verknüpfungen, keine Graphiken, schlichte Tabellen eben.

Ich suche auch schon seit einiger Zeit immer wieder nach einem Python-Tool, was mir die lästige Arbeit, ein CSV zu erstellen, daß in Excel zu laden, dann als Exel-File zu speichern einfach mal abnimmt, aber bisher auch ohne erfolg.

Ist blöd, daß man die fiesen Strategien von MS über komplizierte Umwege ausgleichen muß.
thomas
User
Beiträge: 1
Registriert: Mittwoch 16. Oktober 2002, 15:47

Hallo!

Man kann Excel-Tabellen auch als HTML speichern. Dabei speichert Excel neben den eigentlichem HTML auch noch eine Menge zusätzlicher Daten bezüglich Formatierung und Formeln. Wenn man diese HTML-Dateien in .xls umbenennt, öffnet Excel diese auch problemlos. :D

So läßt sich problemlos ein (Pseudo-)Excel-Export realisieren, ohne dass der Anwender es merkt.

Schöne Grüße,
Thomas
cmkl
User
Beiträge: 1
Registriert: Freitag 15. November 2002, 12:30

Hallo,

Excel benutzt das sogenannte "biff" fileformat. Ich wusste bisher gar nicht
das es ein Python Modul gibt, das dieses Format erzeugen kann.
(besagtes http://www.greytrout.com/spreadscript.html)
Für perl gibt es schon länger ein solches Modul - es wurde einmal in
der i`X beschrieben. Der Vorteil ist, das hierbei man nicht auf Windows
und eine Excel Installation angewiesen ist. Geht also auch unter Unix.

Wenn man Windows und Excel auf seinem Rechner hat. kann man mit
Python über COM Excel fernsteuern und Sheets erzeugen, ändern,
speichern. Dazu braucht man win32com. Wer das nicht will kann auch
ein schlankes COM Modul verwenden: ctypes von T. Heller
(http://starship.python.net/crew/theller/ctypes.html)

Der Vorteil von ctypes ist der minimalistische Ansatz. Gerade mal eine
Handvoll files sind zu installieren. Die Installation geht von Hand auch
wenn man keine Administratorrechte hat (z.B. im Büro). Das habe ich
mit den Standard win32 Modulen noch nicht geschafft. ctypes ist
gewissermaßen der Nachfolger von calldll und ntypes (S. Rushing).
Man ist damit auch in der Lage beliebigen Code in beliebigen win32 dlls
auszuführen (und u. U. sein System an die Wand zu fahren)

Mich würde interessieren, ob andere schon Erfahrungen mit ctypes vs.
win23com gesammelt haben, insbesondere in Verbindung mit MS Office.

Carl
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Nach anfänglichem Enthusiasmus scheint das ganze ja ein bisschen ins Stocken geraten zu sein. Habt Ihr die Lust verloren oder verliert Ihr euch in hunderten von Lösungsansätzen?

KISS
keep it stupid simple!

Wenn Ihr mich fragt, sollte man auf folgendes Ziel losmaschieren:
  • universelles, standardtisiertes Fileformat, welches nicht nur von Excel gelesen werden kann
  • es sollte möglich sein, Gestaltungselemente (Schriftart, Ausrichtung, etc.) zu übergeben.
  • es sollte ein unabhängiger Standard verwendet werden
  • eventuell eine Prüfroutine. mit der ermittelt werden kann, ob erzeugte Tabelle mit Programm abc Version xyz auch gelesen werden kann.
  • Behandlung lokaler Gegebenheiten (US 10,000.00 = EU 10.000,00) muß grundsätzlich machbar sein.
Selbst wenn man sich auf diese wenigen Grundfunktionen beschränkt, kann man sich noch immer genug verennen. Deshalb sollten Funktionen etwa in der Reihenfolge
  • Texte
  • Zahlen
  • Formatierungen
  • Formeln
  • Images
implementiert werden. Ich persönlich würde das ganze in XML machen.

Wenn das ein- oder andere Officeprogramm XML nicht direkt unterstützt, kann man ja auch den umgekehrten Weg gehen, d.h. man schreibe ein Script wie z. B. XML2XLS Die meisten Officeprogramme sind scriptfähig.

Bin mal gespannt auf eure Reaktion

Hans
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

hans hat geschrieben:Nach anfänglichem Enthusiasmus scheint das ganze ja ein bisschen ins Stocken geraten zu sein. Habt Ihr die Lust verloren oder verliert Ihr euch in hunderten von Lösungsansätzen?
Naja, ich denke dass ich das ganze etwas aufgehalten habe, weil ich Codestücke versprochen habe, auf den jetzt andere warten. Bin leider noch nicht so weit, habe ziemlich viel um die Ohren. Meine ersten Versuche habe ich angefangen umzustrukturieren, und bin noch mittendrin aus Zeitmangel hängengeblieben.

Also marschiert mal ruhig ohne mich los, ich klinke mich wieder ein, wenn ich Zeit habe.

Sorry
Jörg
x-herbert

Hi bin noch etwas "wackelig" auf den Python-Füßen.... habe mich aber im bereich PHP mit dem Excel-Format beschäftigt.

Der zu erzeugende Binärstom ist für ein "0815"-Chart kein großer Akt - ich denke bei PHP bzw. Perl kann man sich eine Menge abgucken. Für PHP kann man aber inzwischen vollständige Tabellen mit Formeln usw. erstellen.

Unter
http://www.wotsit.org/search.asp?s=xls
sind etliche Beschreibungen dazu...

Wenn es weiter hilft, kenn ich meine "Unterlagen" mal zusammenkramen...

Gruss Ingolf
x-herbert
User
Beiträge: 59
Registriert: Mittwoch 27. November 2002, 20:52

Hi,

viel scheint hier ja nicht viel los zu sein...

Mir ist nicht ganz klar, wie ich in Python ein Binärfile packe - mit der Option open('exceltest.xls','wb') passiert eigentlich nicht viel.

Als kleinen Test wollte ich mal ein Excelfile schreiben
0x809, 0x8, 0x0, 0x10, 0x0, 0x0 ist der "BOF" - Start
0x0A, 0x00 ist der "EOF" - Ende

Python schreibt mir die Sachen immer als "normalen" String und nicht binär - weitere Formatierungen wie 16 oder 32bit, endian-angaben konnte ich nicht finden????

gruss x-herbert
x-herbert
User
Beiträge: 59
Registriert: Mittwoch 27. November 2002, 20:52

ah habe nochwas gefunden pack()

... muss erstmal lesen...

gruss x-herbert
x-herbert
User
Beiträge: 59
Registriert: Mittwoch 27. November 2002, 20:52

dirty hacking des BIFF-Formates:

Code: Alles auswählen

import struct, os, sys

pathname = os.path.dirname(sys.argv[0])	# akt. Verzeichnis des Scripts
os.chdir(pathname)                      # wechsle in Scriptverzeichnis

BOF = struct.pack("6h", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0) #Start
EOF = struct.pack("2h", 0x0A, 0x00)                      #Ende  
label = struct.pack("6h", 0x204, 12, 0, 0, 0x0, 4)       # = test
b = BOF+label+'test'+EOF

fio = open('exceltest.xls', 'wb')
fio.write(b)
fio.close()

print 'ready'
gruss x-herbert

... "man" könnte ja mal ein Modul schreiben...
Antworten