2010-09-16 49 views
5

Tôi có một lớp Python ExcelDocument cung cấp các phương thức tiện lợi cơ bản để đọc/ghi/định dạng các tệp Excel và tôi nhận được một lỗi lạ trong mã Python có vẻ đơn giản. Tôi có một lưu và saveAs phương pháp:Tại sao tôi không thể "lưu dưới dạng" tệp Excel khỏi mã Python của mình?

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) 

Các phương pháp tiết kiệm hoạt động hoàn hảo, nhưng khi tôi cố gắng gọi phương thức saveAs - myExcelObject.saveAs("C:/test.xlsx") - Tôi nhận được lỗi sau:

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) 

bất cứ ai có thể giải thích những gì đang xảy ra?

+0

Một vài câu hỏi. Tệp đã tồn tại chưa? Tệp đã mở chưa? 'Save()' ghi tệp vào đâu? –

Trả lời

13

Tôi đã tìm thấy (một cách khó khăn) rằng SaveAs không hỗ trợ dấu gạch chéo /.
Thay vào đó hãy thử saveAs("C:\\test.xlx").

+0

wow, điều đó đã xảy ra. cám ơn rất nhiều!! nhưng tại sao nó khác với phương pháp lưu? có cách nào tôi có thể khử trùng đầu vào không? Tôi thực sự không thể tin tưởng tất cả người dùng của mình biết về điều này ... – froadie

+0

@froadie, 'SaveCopyAs' hỗ trợ'/', nhưng' SaveAs' thì không. Đi con số. Tôi chỉ thay thế '/' bằng '\\' trong tên tập tin. –

+6

Hoặc sử dụng 'saveAs (os.path.join (" C: "," test.xlx "))'. Thư viện 'os.path' có nhiều cách độc lập để xử lý tên tập tin, đường dẫn, bất cứ thứ gì. –

Các vấn đề liên quan