2010-09-16 3 views
5

Ich habe eine Python ExcelDocument Klasse, die grundlegende Komfort-Methoden zum Lesen/Schreiben/Formatieren von Excel-Dateien bietet, und ich bekomme einen seltsamen Fehler in scheinbar einfachen Python-Code. Ich habe eine sichere und saveAs Methode:Warum kann ich eine Excel-Datei nicht von meinem Python-Code speichern?

def save(self): 
    ''' Save the file ''' 
    self.workbook.Save() 

def saveAs(self, newFileName): 
    ''' Save the file as a new file with a different name ''' 
    self.workbook.SaveAs(newFileName) 

die Save-Methode funktioniert perfekt, aber wenn ich versuche, die saveAs Methode aufrufen - myExcelObject.saveAs("C:/test.xlsx") - bekomme ich folgende Fehlermeldung:

Traceback (most recent call last): 
    File "C:\workspace\Utilities\src\util\excel.py", line 201, in <module> 
    excel.saveAs("C:/test.xlx") 
    File "C:\workspace\Utilities\src\util\excel.py", line 185, in saveAs 
    self.workbook.SaveAs(newFileName) 
    File "<COMObject Open>", line 7, in SaveAs 
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Office Excel', u"Microsoft Office Excel cannot access the file 'C:\\//8CBD2000'. There are several possible reasons:\n\n\u2022 The file name or path does not exist.\n\u2022 The file is being used by another program.\n\u2022 The workbook you are trying to save has the same name as a currently open workbook.", u'C:\\Program Files\\Microsoft Office\\Office12\\1033\\XLMAIN11.CHM', 0, -2146827284), None) 

Kann mir jemand erklären, was es passiert?

+0

Ein paar Fragen. Ist die Datei bereits vorhanden? Ist die Datei bereits geöffnet? Wo schreibt 'save()' die Datei? –

Antwort

13

Ich habe (auf die harte Tour) gefunden, dass SaveAs Slash / nicht unterstützt.
Versuchen Sie stattdessen saveAs("C:\\test.xlx").

+0

Wow, das war es. vielen Dank!! aber warum ist es anders als die save-methode? Gibt es irgendeine Möglichkeit, den Input zu sanieren? Ich kann nicht wirklich darauf vertrauen, dass alle meine User von dieser Eigenart wissen ... – froadie

+0

@roadie, 'SaveCopyAs' unterstützt'/', aber' SaveAs' nicht. Stelle dir das vor. Ich ersetze einfach '/' durch '\\' in den Dateinamen. –

+6

Oder verwenden Sie 'saveAs (os.path.join (" C: "," test.xlx "))'. Die 'os.path'-Bibliothek ist randvoll mit plattformunabhängigen Möglichkeiten zur Handhabung von Dateinamen, Pfaden, was auch immer. –

Verwandte Themen