Python Excel Datei öffnen + Makro ausführen

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
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

Folgenden Code habe ich bisher:

Code: Alles auswählen

    PATH1 = r'C:\Users\Bluewan\Downloads\*.csv'
    all_filenames = glob.glob(PATH1)
    dateiname = max(all_filenames, key=os.path.getctime)
    path2 = r"C:\Users\Bluewan\Downloads\\" + dateiname
    xl = wincl.Dispatch('Excel.Application')
    xl.Workbooks.Open(Filename = dateiname, ReadOnly=1)
    xl.Application.Run("PERSONAL.XLSB!Makro2")
    xl.Application.Quit()
    del xl
Bei Excel steht als Makroname: "PERSONAL.XLSB!Makro2" bin davon ausgegangen, dass dieser Name bei der Methode Application.Run() gefragt war. Und bei der importierung habe ich

Code: Alles auswählen

import win32com.client as wincl
benutzt (also bitte nicht verwirren lassen)
Leider funktioniert das ganze so nicht. Mein Ziel ist es ein festes Makro, welches ich erstellt habe immer auf die jeweilige Excel-Datei anzuwenden. Datei wird im Hintergrund geöffnet(will ich eigentlich auch net, progress will ich sehen). Und kommt ne Fehlermeldung, bei Application.run, dass er das net gefunden hat.

Fehlermeldung:
(-2147352567, 'Ausnahmefehler aufgetreten.', (0, 'Microsoft Excel', "Wir konnten 'C:\\Users\\Bluewan\\Documents\\PERSONAL.XLSB' nicht finden. Wurde das Objekt vielleicht verschoben, umbenannt oder gelöscht?", 'xlmain11.chm', 0, -2146827284), None)

MfG
Benutzeravatar
__blackjack__
User
Beiträge: 14013
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Call: Die Namen könnten besser sein. Keine Nummern anhängen und keine Abkürzungen. Namen komplett in GROSSBUCHSTABEN sind für Konstanten und die werden nicht in Funktionen definiert, sondern auf Modul- oder Klassenebene.

Mir ist nicht so ganz klar nach welchem Kriterium Englisch und Deutsch bei den Namen gewählt wurde. `all_filename` aber `dateiname`. Entscheide Dich für eine Sprache.

`all_` ist auch nicht so ganz richtig, denn es sind nur CSV-Dateinamen.

Pfadteile werden nicht mit ``+`` zusammengesetzt sondern mit `os.path.join()`. Allerdings ist das auch falsch vor den kompletten Pfad noch mal den Pfad dort hin zu setzen. Fällt nicht auf weil `path2` nirgends verwendet wird.

Das ``del`` am Ende macht keinen Sinn.

Bleibt das hier:

Code: Alles auswählen

CSV_FILENAME_PATTERN = r"C:\Users\Bluewan\Downloads\*.csv"


def ...():
    filename = max(glob.iglob(CSV_FILENAME_PATTERN), key=os.path.getctime)
    excel = wincl.Dispatch("Excel.Application")
    excel.Workbooks.Open(Filename=filename, ReadOnly=1)
    excel.Application.Run("PERSONAL.XLSB!Makro2")
    excel.Application.Quit()
Gibt es denn diese `PERSONAL.XLSB` in dem Verzeischnis wo sie gesucht wird? Falls nicht, wo liegt sie?
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

__blackjack__ hat geschrieben: Montag 11. November 2019, 22:50 @Call: Die Namen könnten besser sein. Keine Nummern anhängen und keine Abkürzungen. Namen komplett in GROSSBUCHSTABEN sind für Konstanten und die werden nicht in Funktionen definiert, sondern auf Modul- oder Klassenebene.

Mir ist nicht so ganz klar nach welchem Kriterium Englisch und Deutsch bei den Namen gewählt wurde. `all_filename` aber `dateiname`. Entscheide Dich für eine Sprache.

`all_` ist auch nicht so ganz richtig, denn es sind nur CSV-Dateinamen.

Pfadteile werden nicht mit ``+`` zusammengesetzt sondern mit `os.path.join()`. Allerdings ist das auch falsch vor den kompletten Pfad noch mal den Pfad dort hin zu setzen. Fällt nicht auf weil `path2` nirgends verwendet wird.

Das ``del`` am Ende macht keinen Sinn.

Bleibt das hier:

Code: Alles auswählen

CSV_FILENAME_PATTERN = r"C:\Users\Bluewan\Downloads\*.csv"


def ...():
    filename = max(glob.iglob(CSV_FILENAME_PATTERN), key=os.path.getctime)
    excel = wincl.Dispatch("Excel.Application")
    excel.Workbooks.Open(Filename=filename, ReadOnly=1)
    excel.Application.Run("PERSONAL.XLSB!Makro2")
    excel.Application.Quit()
Gibt es denn diese `PERSONAL.XLSB` in dem Verzeischnis wo sie gesucht wird? Falls nicht, wo liegt sie?
Habe gerade herausgefunden, dass "PERSONAL.XLSB" in diesem Verzeichnis liegt: C:\Users\Bluewan\AppData\Roaming\Microsoft\Excel\XLSTART
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

Nachricht = (-2147352567, 'Ausnahmefehler aufgetreten.', (0, 'Microsoft Excel', "Das Makro 'C:\\Users\\Bluewan\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART\\PERSONAL.XLSB!Makro2' kann nicht ausgeführt werden. Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert.", 'xlmain11.chm', 0, -2146827284), None)

Code: Alles auswählen

   CSV_FILENAME_PATTERN = r"C:\Users\Bluewan\Downloads\*.csv"
    filename = max(glob.iglob(CSV_FILENAME_PATTERN), key=os.path.getctime)
    excel = wincl.Dispatch("Excel.Application")
    excel.Workbooks.Open(Filename=filename)
    excel.Application.Run(r"C:\Users\Bluewan\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB!Makro2")
    excel.Application.Quit()
Das ist der jetzige stand.
Call
User
Beiträge: 21
Registriert: Donnerstag 25. April 2019, 22:38

__blackjack__ hat geschrieben: Montag 11. November 2019, 22:50 @Call: Die Namen könnten besser sein. Keine Nummern anhängen und keine Abkürzungen. Namen komplett in GROSSBUCHSTABEN sind für Konstanten und die werden nicht in Funktionen definiert, sondern auf Modul- oder Klassenebene.

Mir ist nicht so ganz klar nach welchem Kriterium Englisch und Deutsch bei den Namen gewählt wurde. `all_filename` aber `dateiname`. Entscheide Dich für eine Sprache.

`all_` ist auch nicht so ganz richtig, denn es sind nur CSV-Dateinamen.

Pfadteile werden nicht mit ``+`` zusammengesetzt sondern mit `os.path.join()`. Allerdings ist das auch falsch vor den kompletten Pfad noch mal den Pfad dort hin zu setzen. Fällt nicht auf weil `path2` nirgends verwendet wird.

Das ``del`` am Ende macht keinen Sinn.

Bleibt das hier:

Code: Alles auswählen

CSV_FILENAME_PATTERN = r"C:\Users\Bluewan\Downloads\*.csv"


def ...():
    filename = max(glob.iglob(CSV_FILENAME_PATTERN), key=os.path.getctime)
    excel = wincl.Dispatch("Excel.Application")
    excel.Workbooks.Open(Filename=filename, ReadOnly=1)
    excel.Application.Run("PERSONAL.XLSB!Makro2")
    excel.Application.Quit()
Gibt es denn diese `PERSONAL.XLSB` in dem Verzeischnis wo sie gesucht wird? Falls nicht, wo liegt sie?
Eine Idee?
Antworten