![](/img/trans.png)
[英]E-mail script sending file ATT00001 instead of text in body of e-mail
[英]How to save Outlook e-mail body text to Excel
我是 Python 的新手,正在我的一個小項目中尋求一些幫助,試圖在工作中自動化一些任務。
我每天都會收到一封電子郵件,郵件正文中包含數據。 我將對電子郵件正文執行 CTRL+A、CTRL+C,然后在 Excel xlsv 文件中執行 CTRL+A、CTRL+V。
我已經嘗試了下面的代碼,並成功地 (i) 搜索該特定電子郵件,(ii) 在輸出中顯示電子郵件消息正文。 但是,我在將輸出保存到 excel 時遇到了問題。 當我嘗試下面的代碼時,我只能將輸出保存到一個單元格中。
如何保存輸出,使其以正確的格式等顯示?
Outlook 電子郵件示例
Report Date 10 Dec 2019
Transaction Date 9 Dec 2019
*- Blank Row -*
Column 1 Column 2 Column 3 Column 4 Column 5 Column 6
Data 1 Data 2 Data 3 Data 4 *blank* Data 6
我需要將輸出以這種格式保存為 Excel xlsv
[Report Date] [10 Dec 2019]
[Transaction Date] [9 Dec 2019]
- Blank row in Excel xlsv -
[Column 1][Column 2][Column 3][Column 4][Column 5] [Column 6]
[Data 1] [Data 2] [Data 3] [Date 4] [blank cell] [Data 6]
import datetime
import win32com.client
from openpyxl import workbook
from openpyxl import load_workbook
today = datetime.date.today()
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
finalfolder = outlook.getDefaultFolder(6).Folders("Final Folder")
def savemessage(subject):
for message in messages:
if message.Subject.find(subject) >= 0 and message.Unread and message.Senton.date() == today or \
message.Subject.find(subject) >= 0 and message.Senton.date() == today:
body_content = message.body
print(body_content)
wb = load_workbook("EXCEL XLSX")
sheets = wb.sheetnames
Sheet1 = wb[sheets[0]]
Sheet1.cell(row = 1, column = 1).value = body_content
wb.save("EXCEL XLSX")
if message.Subject.find(subject) >= 0 and message.Unread and message.Senton.date() == today:
message.Unread = False
message.move(finalfolder)
elif message.Subject.find(subject) >= 0 and message.Senton.date() == today:
message.move(finalfolder)
break
savemessage("SPECIFIC E-MAIL SUBJECT")
我認為您遇到的問題來自Sheet1.cell(row = 1, column = 1).value = body_content
。 你能試着循環嗎?
此外,您可以嘗試僅使用 csv。 當我寫入 csv 時,它會進入一個 Excel 文件,它的格式比我使用 openpxyl 時要好得多。
例如:
import csv
strFile = r'C:\users\username\Desktop\csvfilename.csv'
f = open(strFile, "w")
csvwriter = csv.writer(f)
try:
if os.path.isfile(strFile):
os.remove(strFile)
except PermissionError:
pass
head = ['[Report Date]', '[10 Dec 2019]']
csvwriter.writerow(head)
for row in messages():
csvwriter.writerow(row)
如前所述,您將所有內容粘貼到一個單元格中。 當然,一切都在那里,因為 Excel 中的單元格可以解釋新行(按 ALT + ENTER 可以在 Excel 單元格中創建新行)
所描述的一種方法可以使用 csv,我也會這樣做。 如果你真的想在這里使用 excel 一個工作示例如何做到這一點:
msg = "Report Date 10 Dec 2019 \r\n" +\
"Transaction Date 9 Dec 2019 \r\n"+ \
"*- Blank Row -* \r\n" +\
"Column1 Column2 Column3 Column4 Column5 Column6 \r\n"+\
"Data1 Data2 Data3 Data4 *blank* Data6 \r\n"
filename = "excel.xlsx"
wb = load_workbook(filename)
sheets = wb.sheetnames
Sheet1 = wb[sheets[0]]
for line_index, line in enumerate(msg.split("\r\n")):
if line_index == 0:
Sheet1.cell(row=1, column=1).value = "Report Date"
Sheet1.cell(row=1, column=2).value = " ".join(line.split(" ")[2:])
elif line_index == 1:
Sheet1.cell(row=2, column=1).value = "Transaction Date"
Sheet1.cell(row=2, column=2).value = " ".join(line.split(" ")[2:])
elif line.lstrip().startswith("*"):
continue
else:
for cell_index, cell in enumerate(line.split(" ")):
if cell.startswith("*"):
cell=""
Sheet1.cell(row=line_index+1,column=cell_index+1).value = cell
wb.save(filename)
這適用於您提供的示例。 如您所見,您必須定義拆分參數。 我選擇\\r\\n
作為新行(作為 Windows 中的標准,我假設您正在使用,否則您必須更改它)並且作為單元格分隔符我使用空白。 如果您正在使用其他東西(例如 tabulator \\t
更改它)。 請注意您的選擇,因為根據我的假設,您的數據看起來如何是不可見的,因為您需要某種分隔符。
同樣,我假設如果 a 以 * (或單元格)開頭,它總是一個空白行/單元格(這就是為什么 continue 在這里跳過一行而不做任何事情。
我還假設標題永遠不會改變(line_index=0 和 line_index=1),除了日期。
我希望這對你有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.