簡體   English   中英

如何將 Outlook 電子郵件正文保存到 Excel

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM