2016-07-18 72 views
0

我有這個劇本,它以前對其他電子郵件的工作,下載附件:保存附件/ xlrd

import win32com.client as win 
import xlrd 

outlook = win.Dispatch("Outlook.Application").GetNamespace("MAPI") 
inbox = outlook.GetDefaultFolder("6") 
all_inbox = inbox.Items 

subject = 'Email w/Attachment' 

attachment1 = 'Attachment - 20160715.xls' 

for msg in all_inbox: 
    if msg.subject == subject: 
     break 
for att in msg.Attachments:  
    if att.FileName == attachment1: 
     break 
att.SaveAsFile('L:\\My Documents\\Desktop\\' + attachment1) 

workbook = xlrd.open_workbook('L:\\My Documents\\Desktop\\' + attachment1) 

然而,當我嘗試使用xlrd打開文件閱讀器(或與熊貓)我得到這個:

raise XLRDError('Unsupported format, or corrupt file: ' + msg) 

XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'\r\nVisit ' 

任何人都可以解釋什麼地方出了問題嗎?

有沒有辦法打開附件,而不保存附件,只需複製工作表並將該附件另存爲.csv文件呢?

謝謝

+0

你是否嘗試將文件擴展名從.xls(舊的,可能不受支持)更改爲.xlsx(新的Excel擴展)? – Sam

+0

是的。沒有工作。任何其他想法? –

+0

物理文件是否確實存在於指定的路徑中,您可以直接打開它嗎?你使用'break'可能是一個問題。嘗試在'SaveAsFile()'之後或之前打印'print(att.FileName)',看看att是否是正確的附件。 – Parfait

回答

0

看看這個question。您可能試圖下載的文件不是真正的excel文件,而是保存爲.xls文件的csv。證據是錯誤消息Expected BOF record; found b'\r\nVisit '。我認爲一個excel文件將從<?xml開始,或者這個效果。你可以用try/catch來解決它:

import pandas as pd 
try: #try to read it as a .xls file 
    workbook = xlrd.open_workbook(path) 

except XLRDError: #if fails, read as csv 
    workbook = pd.read_csv(path)