我正在尝试将Outlook电子邮件收到的html表复制粘贴到新的Excel电子表格,但出现“ pywintypes.com_error”。寻求一种更Python化的方法来在电子邮件正文上执行等同于“ Control + A”的操作并将其粘贴到新的电子表格中。
相关的代码段是:
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
# Select main Inbox
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
try:
for message in messages:
try:
if message.subject == 'myemailed Report':
print('Sender:' , message.sender)
print(message.subject)
mailItem = message.HTMLBody # <----Attempting to copy the body of the selected email.
# Start an instance of Excel
Xlsx = win32com.client.Dispatch("Excel.Application")
# Prevent Excel from asking questions.
Xlsx.DisplayAlerts = True # will change to False
Xlsx.Visible = True # will change to False
# Create a new Excel Workbook
workbook = Xlsx.Workbooks.Add()
ws = workbook.Sheets("Sheet1")
ws.Range('a7').select
ws.Paste(mailItem) # <--------------- Generates Error
workbook.SaveAs(mydesktop+'UpdatedSheet.xlsx')
# Quit Excel
Xlsx.Quit()
except:
x=1
except:
x=1
我收到一条消息:回溯(最近一次通话最近): 文件“”,第1行,位于 ws.Paste(mailItem) 粘贴中的文件“>”,第3行 pywintypes.com_error:(-2147352567,'发生异常。',(0,'Microsoft Excel','工作表类的粘贴方法失败','xlmain11.chm',0,-2146827284),无)
有更好的方法吗?感谢您的帮助!
答案 0 :(得分:0)
ws.Paste(mailItem)是问题的主要部分。代码应为:
// Replace the k'th byte within an int
int replace_byte(int v1 ,char v2, size_t k)
{
memcpy( (void*) (((char*)&v1)+k) , &v2 , sizeof(v2) );
return v1;
}
但是-像按“ Ctrl-A”一样复制电子邮件正文要复杂得多,并且几乎有很多答案。我设法完成了以下工作,但不知道为什么会起作用。
我使用了导入pyperclip,它需要pip安装pyperclip以及以下代码:
ws.Paste()
然后稍后...
import pyperclip
def copy(text):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
def paste():
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
return data
我尝试不使用pyperclip来执行此操作,但是起初使用两个def和ws.Paste()的组合起作用。