Seite 1 von 1

In Excel-Datei Zeilenweise schreiben....Wie ?

Verfasst: Sonntag 16. Juli 2006, 14:01
von Andy
Hallo Leute!

Hab´s schon mit der Suchfunkt. probiert. Hier komme ich jedoch gar nicht weiter:

Ich möchte mit Python Zeilenweise in eine Exceldatei schreiben.
Hab ich zum Teil auch schon geschafft. Aber dass ganze soll so ablaufen: Jedesmal wenn das Programm neugestartet wird, sollen
die Daten (fang ich aus den Entry´s ab) in Excel in eine neue Zeile geschrieben werden.

Folgendes habe ich bishererreicht:

Code: Alles auswählen

import win32com
import win32com.client
from win32com.client import Dispatch
        xlApp = Dispatch("Excel.Application")
        xlApp.Workbooks.Open("C:\Dokumente und Einstellungen\Richy Rich\Desktop\Haftschnitt.xls")
        xlApp.Visible = 1
        xlApp.ActiveSheet.Cells(1,1).Value = 'VSNR'
        xlApp.ActiveSheet.Cells(1,2).Value = 'Vorname'
        xlApp.ActiveSheet.Cells(1,3).Value = 'Zuname'
        xlApp.ActiveSheet.Cells(1,4).Value = 'Straße'
        xlApp.ActiveSheet.Cells(1,5).Value = 'Hausnr'
        xlApp.ActiveSheet.Cells(1,6).Value = 'PLZ'
        xlApp.ActiveSheet.Cells(1,7).Value = 'Ort'
        xlApp.ActiveSheet.Cells(1,8).Value = 'Beruf'
        xlApp.ActiveSheet.Cells(1,9).Value = 'Branche'
        xlApp.ActiveSheet.Cells(1,10).Value = 'Gebdat'
        xlApp.ActiveSheet.Cells(1,11).Value = 'Staatsangeh'

        xlApp.ActiveSheet.Cells(2,1).Value = vsnr
        xlApp.ActiveSheet.Cells(2,2).Value = vorname
        xlApp.ActiveSheet.Cells(2,3).Value = zuname
        xlApp.ActiveSheet.Cells(2,4).Value = straße
        xlApp.ActiveSheet.Cells(2,5).Value = hausnr
        xlApp.ActiveSheet.Cells(2,6).Value = plz
        xlApp.ActiveSheet.Cells(2,7).Value = ort
        xlApp.ActiveSheet.Cells(2,8).Value = beruf
        xlApp.ActiveSheet.Cells(2,9).Value = branche
        xlApp.ActiveSheet.Cells(2,10).Value = gebdat
        xlApp.ActiveSheet.Cells(2,11).Value = staatsan

        xlApp.ActiveWorkbook.Close(SaveChanges=1)
        xlApp.Quit()
        xlApp.Visible = 0
        del xlApp
Ähm, ist der erste Versuch mit Excel: Kritik erwünscht :wink:
Kennt einer`ne Lösung?
Gruss andy

Verfasst: Montag 17. Juli 2006, 09:02
von N317V
Ich rate jetzt einfach mal drauf los, was Dein Problem sein könnte: Du weißt nicht wo die nächste Zeile ist. Das kannst Du entweder irgendwo mitspeichern (schnellste Methode) oder die Zeilen durchsuchen. Mit Excel 97 ging noch sowas wie xlCellTypeLastCell, in Excel 2002 hat das nicht mehr so gut funktioniert. Ich kann mich täuschen, aber ich glaube mich zu erinnern, dass dieser Wert immer auf die letzte Zelle des gesamten Arbeitsblattes zeigt, was für Dich eigentlich OK sein sollte. Vorher konnte man den Bereich auch einschränken. Alternativ kannst Du auch die Zeilen von vorne durchgehen und kucken ob was drin steht (seeehr laaangsaaaaam).

Apropos Kritik: weißt Du was Schleifen sind? while? for?

Verfasst: Montag 17. Juli 2006, 17:09
von Andy
N317V hat geschrieben:Du weißt nicht wo die nächste Zeile ist. Das kannst Du irgendwo mitspeichern (schnellste Methode)
Hm, stimmt! Wenn es irgenwo im Netz´ne ordentliche Doku zu win32com geben würde, dann
würd´ich das natürlich so machen wollen. :? Oder meinst Du in Excel mitspeichern???
Mit Excel 97 ging noch sowas wie xlCellTypeLastCell, in Excel 2002 hat das nicht mehr so gut funktioniert. Ich kann mich täuschen, aber ich glaube mich zu erinnern, dass dieser Wert immer auf die letzte Zelle des gesamten Arbeitsblattes zeigt, was für Dich eigentlich OK sein sollte.
Nee, eigentlich möchte ich ja bei jeden Programmstart in eine
neue Zeile der Excel-Tabelle schreiben. Eine Fortlaufende Tabelle halt.
Apropos Kritik: weißt Du was Schleifen sind? while? for?
Ja, dass schon. Aber nicht umbedingt wie ich die hier einbauen muss. Mit Schleifen tue ich mich immer ein wenig schwer. :roll:

Hmh, keine Ahnung wie ich weiter mache.... :cry:

Verfasst: Montag 17. Juli 2006, 17:26
von N317V
Andy hat geschrieben:
N317V hat geschrieben:Du weißt nicht wo die nächste Zeile ist. Das kannst Du irgendwo mitspeichern (schnellste Methode)
Hm, stimmt! Wenn es irgenwo im Netz´ne ordentliche Doku zu win32com geben würde

Schonmal in PythonWin den Menüpunkt "Help -> PythonWin Reference" angeschaut?
Andy hat geschrieben: Oder meinst Du in Excel mitspeichern???
Yo, meinte ich eigentlich.
Andy hat geschrieben:
Mit Excel 97 ging noch sowas wie xlCellTypeLastCell, in Excel 2002 hat das nicht mehr so gut funktioniert. Ich kann mich täuschen, aber ich glaube mich zu erinnern, dass dieser Wert immer auf die letzte Zelle des gesamten Arbeitsblattes zeigt, was für Dich eigentlich OK sein sollte.
Nee, eigentlich möchte ich ja bei jeden Programmstart in eine
neue Zeile der Excel-Tabelle schreiben. Eine Fortlaufende Tabelle halt..
Und dafür musst Du wissen, welches die letzte gefüllte Zeile war, oder?

Verfasst: Montag 17. Juli 2006, 18:00
von Andy
Hi, N317V!


Ja, nur die Reference spuckt zum Thema auch nur "Quick Start to Client side COM and Python" aus.

In Excel den Zeilenwechsel mitspeichern. - Und wie würdest Du das machen? mit irgend´nen Makro? Oder geht das viel einfacher?
Und dafür musst Du wissen, welches die letzte gefüllte Zeile war, oder?
Stimmt insoweit. Ich glaub´jetzt meintst Du eher VBA? Kenn ich mich gar nicht mit aus.

Gruss andy

Verfasst: Montag 17. Juli 2006, 18:19
von N317V
Andy hat geschrieben: Ja, nur die Reference spuckt zum Thema auch nur "Quick Start to Client side COM and Python" aus.
Ich hab hier build 205 für Python 2.4 und da ist ne komplette Doku dabei.
Andy hat geschrieben: In Excel den Zeilenwechsel mitspeichern. - Und wie würdest Du das machen? mit irgend´nen Makro? Oder geht das viel einfacher?
Jetzt sag aber mal: Du kannst doch Werte in Excel schreiben, oder? Du erlaubst Dir doch jetzt nen Scherz mit mir.

Verfasst: Montag 17. Juli 2006, 18:46
von Andy
N317V hat geschrieben:Ich hab hier build 205 für Python 2.4 und da ist ne komplette Doku dabei.
Bei mir build 208:
Modules
adsi
axcontrol
axdebug
axscript
directsound
exchange
exchdapi
internet
mapi
pythoncom
shell
win32com.authorization.authorization
Das wär alles zum Thema Module zur Com-Schnittstelle.
Und hier findet man einfach nichts mehr was mit Excel oder mit Word zu tun hat. Ich jedenfalls nicht.
N317V hat geschrieben: Jetzt sag aber mal: Du kannst doch Werte in Excel schreiben, oder? Du erlaubst Dir doch jetzt nen Scherz mit mir.
Nein, ich würde es nicht schreiben, wenn ich es nicht Ernst meine... Wie kann ich in einer leeren Tabelle vorgeben, dass nach einer Zeile Python-Übergabe, ein Zeilenwechsel stattfinden soll, und neue Daten per Python übergeben werden sollen?
Tut mir leid wenn Dir das zu simpel vorkommt, aber manchmal sieht man vor lauter Bäume den Wald nicht mehr.

Mit xlCellTypeLastCell weiß ich wirklich nicht viel anzufangen. :(

Verfasst: Montag 17. Juli 2006, 23:01
von keppla
Apropos Kritik: weißt Du was Schleifen sind? while? for?
Ja, dass schon. Aber nicht umbedingt wie ich die hier einbauen muss. Mit Schleifen tue ich mich immer ein wenig schwer. Rolling Eyes
Lass deine innere Faulheit sprechen, die ist da imho ein sicherer Wegweiser ;)

Code: Alles auswählen

contents = ('VSNR', 'Vorname', 'Zuname', 'Hausnr', 'PLZ', 'Ort', 'Beruf', 'Gebdat', 'Staatsangeh')

for i, content in enumerate(contents):
  xlApp.ActiveSheet.Cells(1, i+1).Value = content
ist doch irgendwie einfacher als die 10 Zeilen 7-17.

Verfasst: Dienstag 18. Juli 2006, 09:38
von N317V
Andy hat geschrieben:Das wär alles zum Thema Module zur Com-Schnittstelle.
Und hier findet man einfach nichts mehr was mit Excel oder mit Word zu tun hat. Ich jedenfalls nicht.
Du sagst doch, Du hättest die Suche benutzt: http://www.python-forum.de/post-38739.html#38739 letzte Zeile.

Verfasst: Dienstag 18. Juli 2006, 09:56
von gerold
Hi!

Damit könnte es auch funktionieren:
http://www.python-forum.de/post-40738.html

lg
Gerold
:-)

Verfasst: Dienstag 18. Juli 2006, 19:08
von Andy
Du sagst doch, Du hättest die Suche benutzt: http://www.python-forum.de/post-38739.html#38739 letzte Zeile.
@N317V: Jaaa, das "hier" war noch auf die Reference bezogen.


@keppla: :shock: for i ... soweit war mir auch klar. Alles weitere sagt mir gerade, dass ist ein Thema mit dem ich mich doch noch mal ein wenig mehr beschäftigen muss.

Danke keppla + Gerold

Verfasst: Mittwoch 19. Juli 2006, 10:10
von N317V
Andy hat geschrieben: @N317V: Jaaa, das "hier" war noch auf die Reference bezogen.
Kein Grund patzig zu werden. Du hast alles, was Du an Info brauchst. Damit beschäftigen musst Du Dich selbst.