Autofilter von pyWin32 nutzen - Pfad korrekt angeben?

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
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Wie im Beispiel hier: http://stackoverflow.com/questions/2967 ... in-pywin32

möchte ich einen Autofilter für einige Spalten eines Excel-Sheets nutzen. Leider schaffe ich es nicht, den Pfad korrekt anzugeben, obwohl zumindest der angegebene Dateiname in meinen Augen korrekt ist. Der letzte Versuch sieht wie folgt aus (die erste Zeile zeigt hierbei das (erfolgreiche) Speichern der Datei nach Schreiben diverser Zeilen und vor der gewünschten Filterung):

Code: Alles auswählen

datei.save('Dateiname ' + str(tag-1) + '.' + str(monat) + '.' + str(jahr) + '.xls')

dat_name = 'Dateiname ' + str(tag-1) + '.' + str(monat) + '.' + str(jahr) + '.xls'
dat_path =  os.path.join(dat_name)
x1.Workbooks.Open(dat_path)
xl.ActiveWorkbook.ActiveSheet.Columns("A:I").AutoFilter(1)
x1.ActiveWorkbook.Close(SaveChanges=1) # 1 is True, 0 is False
x1.Quit()
Leider erscheint immer die Meldung "Ausnahmefehler eingetreten" (0, u'Microsoft Excel', u"'Dateiname 21.01.2013.xls' wurde nicht gefunden. Überprüfen Sie die Rechtschreibung des Dateinamens...")

Kann mir jemand weiterhelfen?
Sirius3
User
Beiträge: 18330
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Remington,

1. Strings baut man nicht mit + zusammen, dafür gibt es format
2. Leerzeichen in Dateinamen sind böse.
3. os.path.join macht gar nichts, weil es mehrere Pfadstücke zusammenfügt, Du aber nur eines angibst.
4. Workbook.Open braucht einen absoluten Dateinamen

Code: Alles auswählen

dat_name = 'Dateiname_{0:02d}.{1:02d}.{2:04d}.xls'.format(tag-1,monat,jahr)

datei.save(dat_name)

dat_path =  os.path.abspath(dat_name)
x1.Workbooks.Open(dat_path)
xl.ActiveWorkbook.ActiveSheet.Columns("A:I").AutoFilter(1)
x1.ActiveWorkbook.Close(SaveChanges=1) # 1 is True, 0 is False
x1.Quit()
lunar

Sirius3 hat geschrieben:2. Leerzeichen in Dateinamen sind böse.
Die 90er sind vorbei…
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

lunar hat geschrieben:
Sirius3 hat geschrieben:2. Leerzeichen in Dateinamen sind böse.
Die 90er sind vorbei…
90er? AFAIR konnte der C=64 das schon ...
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Vielen Dank Sirius, das hat geholfen. Wobei mir übrigens das mit join schon bewusst war, ich aber gerade keine Alternative wusste. Auch die Leerzeichen haben bisher keine Probleme bereitet, aber das Entfernen Selbiger hat tatsächlich zur Lösung beigetragen.

Kann ich nun auch den Autofilter-Wert gleich auf einen gewünschten Wert setzen, z.B. 1? (habe in dieser Spalte nur Zahlen)
BlackJack

@/me: Ja das kann der C64 beziehungsweise die dafür gängigen Dateisysteme. Ich fand den Umstieg von 16 Zeichen-Namen zu 8.3 auf DOS damals ziemlich einschränkend. Ich hatte damals einen Norton Commander-Clon der mit den damals üblichen „descript.ion”-Dateien umgehen konnte und man damit zu jedem Dateinamen noch eine Beschreibungszeile ablegen konnte.
Sirius3
User
Beiträge: 18330
Registriert: Sonntag 21. Oktober 2012, 17:20

lunar hat geschrieben:Sirius3 hat geschrieben:
2. Leerzeichen in Dateinamen sind böse.

Die 90er sind vorbei…
Dann versuch mal Dein Pythonmodul 'mein Modul.py' zu nennen. :twisted:
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Hm und zum Thema ;), kann man den Autofilter auf einen bestimmten Wert setzen?
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Remington Steele hat geschrieben:kann man den Autofilter auf einen bestimmten Wert setzen?
Geht das womöglich gar nicht?
lunar

@Sirius3 Das hat nichts mit Dateinamen zu tun, sondern mit der Syntax von Python, die keine Leerzeichen erlaubt. Mit dem richtigen Import Hook kann ich Module auch aus Dateien mit Leerzeichen im Namen laden.
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Lässt sich kein Wert angeben, nach dem der Autofilter filtern soll - kann mir jemand ggf. bitte zumindest bestätigen, dass das nicht möglich ist?
Antworten