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()
我写了一些代码来自动完成一些工作,这包括从特定的 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()