2010-09-16 6 views
5

Ho una classe Python ExcelDocument che fornisce metodi di base per la lettura/scrittura/formattazione di file Excel e sto ricevendo uno strano errore in codice Python apparentemente semplice. Ho un salvataggio e saveAs metodo:Perché non posso "salvare come" un file Excel dal mio codice Python?

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) 

Salva metodo funziona perfettamente, ma quando provo a chiamare il metodo saveAs - myExcelObject.saveAs("C:/test.xlsx") - ottengo il seguente errore:

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) 

Qualcuno può spiegare che cosa sta succedendo?

+0

Alcune domande. Il file esiste già? Il file è già aperto? Dove si salva il file 'save()'? –

risposta

13

Ho trovato (nel modo più rigido) che SaveAs non supporta la barra /.
Prova invece saveAs("C:\\test.xlx").

+0

wow, l'ha fatto. grazie mille!! ma perché è diverso dal metodo di salvataggio? c'è un modo in cui posso disinfettare l'input? Non posso davvero fidarmi di tutti i miei utenti per sapere di questa stranezza ... – froadie

+0

@froadie, 'SaveCopyAs' supporta'/', ma' SaveAs' no. Vai a capire. Sostituisco '/' con '\\' nei nomi dei file. –

+6

Oppure usare 'saveAs (os.path.join (" C: "," test.xlx "))'. La libreria 'os.path' è piena zeppa di modi indipendenti dalla piattaforma per gestire nomi di file, percorsi e quant'altro. –

Problemi correlati