Problem mit Excel und pywin32

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.
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Problem mit Excel und pywin32

Beitragvon Anfänger1911 » Freitag 13. Juli 2007, 14:33

Hi!

Ich habe mehrere zip-Dateien, die ich über ein Python-Skript entpacke. Die enthaltenen .htm-Dateien werden in einem Ordner gespeichert, der vom Benutzer eingegeben wird. Dann öffne ich diese Dateien mit pywin32 in Excel und speichere unter dem gleichen Namen als .xls in demselben Ordner. Bei mir funktioniert dies jedoch nur, wenn ich die .xls-Dateien anders benenne als die .htm-Dateien und auf einem anderen PC, auf dem ich das Skript ebenfalls ausführen muss, funktioniert die Anweisung zum Speichern als .xls-Datei garnicht. Woran kann das liegen? Wie kann ich den Fehler beheben?

Mein Code:

Code: Alles auswählen

import zipfile as zip
import os
from Tkinter import *
import win32com.client

class Askpath:
    def __init__(self):
        self.window=Tk()
        self.window.geometry('250x250')
        self.window.title('Unzipper 3.1')
        self.window.config(bg='black')     
        self.label1=Label(self.window, bg='black', fg='yellow', font=('Arial', 12), text='Pfad zu Zip-Daten:')
        self.entry1=Entry(self.window, font=('Arial', 12))
        self.label2=Label(self.window, bg='black', fg='yellow', font=('Arial', 12), text='Erste zu entpackende Datei:')
        self.entry2=Entry(self.window, font=('Arial', 12))
        self.label3=Label(self.window, bg='black', fg='yellow', font=('Arial', 12), text='Letzte zu entpackende Datei:')
        self.entry3=Entry(self.window, font=('Arial', 12))
        self.button=Button(font=('Arial', 12), text='OK', command=self.savedata, width=10, bg='black', fg='yellow')
        self.label1.pack(pady=5,padx=5)
        self.entry1.pack(pady=5,padx=5)
        self.label2.pack(pady=5,padx=5)
        self.entry2.pack(pady=5,padx=5)
        self.label3.pack(pady=5,padx=5)
        self.entry3.pack(pady=5,padx=5)
        self.button.pack(pady=5,padx=5)
        self.window.mainloop()

    def savedata(self):
        global pfad,begin,end
        pfad=self.entry1.get()
        begin=int(self.entry2.get())
        end=int(self.entry3.get())+1
        self.unzip()

    def unzip(self):
        global pfad,begin,end
        for i in range(begin,end):
            name='FDAT' + str(i)
            if not pfad.endswith('\\'):
                pfad = pfad + '\\'
            datei=pfad+name+'.zip'
            f=zip.ZipFile(datei)
            for l in f.namelist():
                path=os.path.join(pfad,'FDAT'+str(i) + '.htm')
                new=open(path,'wb')
                new.write(f.read(l))
                new.close()
                filename = os.path.abspath(pfad + '\\FDAT' + str(i) + '.htm')
                excel_app = win32com.client.dynamic.Dispatch('Excel.Application')
                excel_workbook = excel_app.Workbooks.Open(filename)
                excel_workbook.SaveAs(pfad + '\\FDAT' + str(i) + '.xls')
                excel_workbook.Close()
                del excel_workbook
                excel_app.Quit()
                del excel_app
            f.close()
            os.remove(pfad + '\\FDAT' + str(i) + '.htm')
            os.remove(pfad + '\\FDAT' + str(i) + '.zip')


Askpath()


Der Fehlertext:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "Meinpfad\unzipper3.py", line 33, in savedata
self.unzip()
File "Meinpfad\unzipper3.py", line 51, in unzip
excel_workbook.SaveAs(pfad + '\\FDAT' + str(i) + '.xls')
File "<COMObject Open>", line 7, in SaveAs
com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, 'Microsoft Office Excel', 'Auf die Datei konnte nicht zugegriffen werden. Versuchen Sie die folgenden L\xf6sungsvorschl\xe4ge:\n\n\x95 \xdcberpr\xfcfen Sie, ob der angegebene Ordner existiert.\n\x95 Stellen Sie sicher, dass der Ordner, in dem sich die Datei befindet, nicht schreibgesch\xfctzt ist.\n\x95 Vergewissern Sie sich, dass der Dateiname keines der folgenden Zeichen enth\xe4lt: < > ? [ ] : | oder *\n\x95 Der Dateiname darf nicht l\xe4nger sein als 218 Zeichen.', 'C:\\Programme\\Microsoft Office\\OFFICE11\\1031\\xlmain11.chm', 0, -2146827284), None)

Vielen Dank im Vorraus!
MfG
Henne
Zuletzt geändert von Anfänger1911 am Freitag 13. Juli 2007, 18:16, insgesamt 1-mal geändert.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Beitragvon mkesper » Freitag 13. Juli 2007, 15:09

Nur 2 Vermutungen:
- Der ausführende User hat keine Schreibrechte in den entsprechenden Order?
- Excel ist auf dem Rechner nicht installiert?
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Beitragvon Anfänger1911 » Freitag 13. Juli 2007, 15:24

Excel ist installiert und der User hat Schreibrechte.

Ich vermute das Problem hängt damit zusammen, dass ich eine Html als Excel Datei speichern möchte. Ich teste nochmal was.

Falls euch noch was auffällt sagt mir bescheid.

MfG
Henne
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Beitragvon Anfänger1911 » Freitag 13. Juli 2007, 16:13

Also ich glaube es liegt daran, dass ich kein Format zum Speichern angegeben habe. Aber wie gebe ich das an? In Excel geht das mit "Fileformat := xlNormal" aber das funktioniert hier irgendwie nicht. Ich habe es auch schon mit "=" und "," versucht...

Kann mir irgendwer sagen, wie es richtig ist?

MfG
Henne
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Beitragvon Anfänger1911 » Freitag 13. Juli 2007, 16:51

Also die "Fehlerzeile" sieht mittlerweile folgendermaßen aus:

Code: Alles auswählen

excel_workbook.SaveAs(Filename=pfad + "\\FDAT" + str(i) + ".xls", Fileformat=win32com.client.constants.xlNormal)


Was ist falsch und wie muss ich das ändern?

Also das Problem scheint an der Syntax des SaveAs-Befehls zu liegen.

MfG
Henne
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Gelöst

Beitragvon Anfänger1911 » Samstag 14. Juli 2007, 09:48

Ich habs jetzt einfach getrennt gemacht. Erst die .htm-Dateien aus den zip-Archiven mit einem Pythonskript entpackt und dann mit einem Makro direkt in Excel die .htm-Dateien als .xls-Dateien gespeichert.

MfG
Henne

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder