Python – 从电子邮件附件下载Excel文件,然后parsing它

编辑 – 更新我创build了一个可怕的黑客打开Excel文件,然后保存下来,然后打开Excel文件到pandas之前,相同的文件名。 这真是太可怕了,但我看不到任何其他方式来解决这个问题作为attachment.SaveFileAs创build和endian问题。

我有下面的代码,在我的Outlook中find一个电子邮件,然后将Excel文件下载到一个目录。 当我尝试打开文件parsing它并在我的脚本中使用它的另一部分时出现格式错误。

我知道这是由Python的保存方式,因为当我手动它的工作正常。

任何帮助不胜感激。

from win32com.client import Dispatch import email import datetime as date import pandas as pd import os outlook = Dispatch("Outlook.Application").GetNamespace("MAPI") inbox = outlook.GetDefaultFolder("6") all_inbox = inbox.Items val_date = date.date.today() sub_today = 'Hi' att_today = 'Net - Regional.xls' ## loop through inbox attachments for msg in all_inbox: yourstring = msg.Subject.encode('ascii', 'ignore').decode('ascii') if(yourstring.find('Regional Reporting Week') != -1): break ## get attachments for att in msg.Attachments: if att.FileName == att_today: attachments = msg.Attachments break attachment = attachments.Item(1) fn = os.getcwd() + '\\' + att_today attachment.SaveASFile(fn) # terrible hack but workable in the short term excel = win32.gencache.EnsureDispatch('Excel.Application') excel.DisplayAlerts = False excel.Visible = True wb = excel.Workbooks.Open(fn) wb.SaveAs(fn) wb.Close(True) xl = pd.ExcelFile(fn) data_df = xl.parse("RawData - Global") print(data_df) 

什么是att_today的文件名string? 它使用适当的扩展名吗?

您将其保存为“.xls”文件。 它可能是一个“.xlsx”扩展名?

除了“.SaveAsFile()”方法之外,您可能需要查看“.ExtractFile”或“WriteToFile”。

最后,即使Python可能将其保存方式与手动保存方式不同,仍然可能使用一些第三方Excel包来正确读取文件,然后再重新写入,以便手动打开/查看。

对于“.xls”扩展名,我会推荐XLRD。 对于“.xlsx”扩展名,我会推荐OpenPyxl。