win32com.client的重复性问题

时间:2019-08-20 17:01:54

标签: python-3.x jupyter-notebook win32com

我已经编写了一些代码来自动化一些工作,包括从特定的Outlook文件夹中提取Excel附件,将其存储在位置(文件名中带有日期时间),然后从中提取一些数据。

我使用Jupyter笔记本有完整的功能代码。但是,当我创建一个.exe(使用auto-py-to-exe)并运行时,我在特定方法SentOn上收到错误消息。有什么指示可能是什么原因?

我尝试使用限制,但是如果我没有明确输入日期和时间,则无法使用。我想使用自动定义的参数。

不起作用:

lastWk_dt = dt.timedelta(days=-7) + currentWk
lastWk = lastWk_dt.strftime("%m/%d/%Y %I:%M %p") ## convert to str and format
messages = calloutFolder.Items.restrict(f"[SentOn] > {lastWk}")

有效,但无用:

messages = calloutFolder.Items.restrict("[SentOn] > '08/13/2019 06:00 AM'")
import os
import shutil
import win32com.client
import datetime as dt

## defining timeline of data extraction
currentWk = dt.datetime.now().date()
lastWk = dt.timedelta(days=-7) + currentWk

## creating folders for storing attachments
cwd = os.getcwd()
savePath = cwd +"/"+str(currentWk)

try:
    shutil.rmtree(savePath)
    os.mkdir(savePath)
except OSError as e:
    os.mkdir(savePath)

## reading MS Outlook subfolder called "SOME FOLDER" in inbox
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
calloutFolder = outlook.GetDefaultFolder(6).Folders["SOME FOLDER"]
messages = calloutFolder.Items

for message in messages:
    if (message.Senton.date() <= currentWk) and (message.Senton.date() >= lastWk):  
            # source of bug, wherever I place SentOn it bugs out
            attachment = message.Attachments.Item(1)

            # changes message to read
            message.Unread = False 

            ## saving attachments
            for attachment in message.Attachments:
                attachment.SaveAsFile(os.path.join(savePath, str(attachment)))
                break

预期结果是将各种Excel文件重命名并保存在位置“ savePath”中

1 个答案:

答案 0 :(得分:0)

lastWk是datetime.datetime对象。尝试

messages = calloutFolder.Items.restrict(f"[SentOn] > '{lastWk}'")

使用f字符串(在3.6+中可用)。否则请使用str.format()方法。

您可能需要将lastWk明确转换为特定格式。在这种情况下,请查看datetime.datetime.strftime()