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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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?
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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:
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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?
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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. :(
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

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.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

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

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Antworten