Seite 1 von 1

Access-Abfrage als Excel-Datei ausgeben über Python

Verfasst: Freitag 27. Januar 2012, 11:56
von Lumberjack
Hallo!
Ich möchte mit Python eine Access-Abfrage als Excel-Datei ausgeben. Dazu habe ich zuerst rausgefunden, wie das in VBA aussieht (funktioniert einwandfrei):

Code: Alles auswählen

Sub VBAtest()
strQu = "Streuobst"
DoCmd.OpenQuery (strQu)              'oeffnet Abfrage
strQuOut = "C:\Users\test.xls"
DoCmd.OutputTo 1, "Streuobst", acFormatXLS, strQuOut, True
End Sub
Der folgende Python-Code sollte eigentlich das gleiche tun:

Code: Alles auswählen

from win32com.client import Dispatch
# -*- coding: cp1252 -*-
accApp = Dispatch("Access.Application")
accApp.Visible = 1                                      #oeffnet Access
strDB = r'C:\Users\test.accdb'                     #Pfad einer Datenbank als String
DB=accApp.OpenCurrentDatabase (strDB)   #oeffnet Access-Datenbank
strQu = "Streuobst"
accApp.DoCmd.OpenQuery (strQu)              #oeffnet Abfrage
strQuOut =r'C:\Users\test.xls'
accApp.DoCmd.OutputTo  (1, "Streuobst",acFormatXLS, strQuOut, True) # .OutputTo(Objekttyp, Objektname, Ausgabeformat, Ausgabedatei, Autostart, Vorlagendatei, Codierung, Ausgabequalität)
Es funktioniert alles bis zum Öffnen der Abfrage, dann kommt folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python26\...\Access_Zugriff_Formular.py", line 10, in <module>
    accApp.DoCmd.OutputTo  (1, "Streuobst",acFormatXLS, strQuOut, True)  # .OutputTo(Objekttyp, Objektname, Ausgabeformat, Ausgabedatei, Autostart, Vorlagendatei, Codierung, Ausgabequalität)
NameError: name 'acFormatXLS' is not defined
Der einzige Unterschied zu VBA ist die Klammer beim .OutputTo-Befehl. Ohne Klammer gibts aber ne Syntax-Beschwerde.
Hat irgendjemand eine Idee, was da schief läuft?
Vielen Dank im Voraus für eure Hilfe!



System: Windows 7 Professional, Service Pack 1
Programme: Office 2007, Python 2.6 (+pywin32-216.win32-py2.6 (http://sourceforge.net/projects/pywin32 ... FBuild216/))

Re: Access-Abfrage als Excel-Datei ausgeben über Python

Verfasst: Freitag 27. Januar 2012, 12:20
von /me
Lumberjack hat geschrieben:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python26\...\Access_Zugriff_Formular.py", line 10, in <module>
    accApp.DoCmd.OutputTo  (1, "Streuobst",acFormatXLS, strQuOut, True)  # .OutputTo(Objekttyp, Objektname, Ausgabeformat, Ausgabedatei, Autostart, Vorlagendatei, Codierung, Ausgabequalität)
NameError: name 'acFormatXLS' is not defined
Woher soll denn der Wert acFormatXLS stammen? Du hast ihn weder selber gesetzt noch von irgendwo importiert.

Re: Access-Abfrage als Excel-Datei ausgeben über Python

Verfasst: Freitag 27. Januar 2012, 16:21
von Lumberjack
Vielen Dank für die schnelle Antwort. Sie hat nur leider gezeigt, dass ich ein ziemlicher Anfänger in dieser Thematik bin. Ich war der Überzeugung, dass wenn ich Zugriff auf den Access-Befehl habe, der Zugriff auf die dafür nötigen Konstanten auch dabei ist. Dazu habe ich über Makepy eine Verbindung zur "Microsoft Access 12.0 Object Library" hergestellt. Daher kriege ich bei Eingabe meiner Access-Applikationsvariablen "accApp" nach der Ausführung des oben genannten Codes folgende Ausgabe:

>>> accApp
<win32com.gen_py.Microsoft Access 12.0 Object Library._Application instance at 0x57162368>

Leider ist mein Wissen zu begrenzt, um zu wissen, von wo ich die acFormatXLS sonst importieren kann.

Re: Access-Abfrage als Excel-Datei ausgeben über Python

Verfasst: Freitag 27. Januar 2012, 17:53
von BlackJack
@Lumberjack: Auf `DoCmd` kannst Du in Python ja auch nicht „einfach so” zugreifen. Da wo das Objekt her kommt, sind vielleicht auch die Konstanten…

Re: Access-Abfrage als Excel-Datei ausgeben über Python

Verfasst: Samstag 28. Januar 2012, 00:29
von /me
Lumberjack hat geschrieben:Leider ist mein Wissen zu begrenzt, um zu wissen, von wo ich die acFormatXLS sonst importieren kann.
Ich vermute, dass das einfach ein Integer-Wert ist. Der sollte sich in VB einfach ausgeben lassen.Anschließend definierst du ihn in deinem Programm einfach selber.

Re: Access-Abfrage als Excel-Datei ausgeben über Python

Verfasst: Samstag 28. Januar 2012, 01:20
von BlackJack
@/me: Ich kenne mich mit COM in Verbindung mit Python nicht so aus, aber sollten solche Konstanten nicht auf dem Objekt definiert sein, das die Anwendung repräsentiert? In VBA müssen die ja auch von der Anwendung kommen, denn die Sprache kennt doch sicher keine anwendungsspezifischen Konstanten „einfach so”. Mit magischen, literalen Zahlen zu arbeiten wäre unschön.