win32com.client 的重复性问题

Repeatibility issue with win32com.client

我写了一些代码来自动完成一些工作,这包括从特定的 Outlook 文件夹中提取 Excel 附件,将其存储在某个位置(文件名中包含日期时间),然后提取一些数据来自它。

我有一个使用 Jupyter notebook 的全功能代码。但是,当我创建一个 .exe(使用 auto-py-to-exe)和 运行 时,我在特定方法 SentOn 上遇到错误。关于可能是什么原因的任何指示?

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

无效:

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"

lastWk 是 datetime.datetime 对象。尝试

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

使用的是 f 弦(在 3.6+ 中可用)。否则使用 str.format() 方法。

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