PYTHON讀取EXCEL內容再轉變成HTML添加到OUTLOOK中


需求

讀取excel里的表格里的內容,然后打開本機的outlook。把excel里的內容添加到正文里,注意。這里是要添加到正文!正文!正文!而不是添加到附件里

 

 

設計思路

1.excel處理

打開excel的方法有很多,但是在不知道excel里,行和列的大小的情況下,就能獲得excel里的非空值行列的辦法不多。我這邊采用的是xlwings這個庫,用的方法是range.current_region這個方法。這個方法會選擇當前range下,有值的區域(非空區域)

通過配置options選項,可以指定excel獲得的值的格式,int或者string,或者空值返回N/A

2.打開outlook

打開outlook在windows上只能用win32模塊了,通過下面方法可以打開outlook並且創建一個空的email

olook = win32com.client.Dispatch("Outlook.Application")
mail = olook.CreateItem(0)

然后配置郵件的htmlbody和outlook郵件懸停(可以手動更改郵件內容,手動發送),可以用以下方法

mail.HTMLBody = body_html
mail.Display(True)

完整代碼

下面是完整代碼,讀者修改一下excel的路徑,就可以自己去試試啦

# -*- coding: UTF-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import win32com.client
import xlwings


def get_excel_date(filename):
    '''
    獲得excel里的所有內容,返回list
    :param filename:  excel路徑
    :return: list[list[]]
    '''
    app = xlwings.App(visible=False, add_book=True)
    app.display_alerts = False
    app.screen_updating = False
    wb = app.books.open(filename)
    sht = wb.sheets[0]
    rng = sht.range('A1')
    # 把excel里的數據讀取成 年-月-日 時:分:秒的格式
    my_date_handler = lambda year, month, day, hour, minute, second, **kwargs: "%04i-%02i-%02i %02i:%02i:%02i" % (
    year, month, day, hour, minute, second)
    # 取出所有內容,這里用ig這個變量,是為了慶祝I.G獲得LOL S8賽季總冠軍
    ig = rng.current_region.options(index=False, numbers=int, empty='N/A', dates=my_date_handler)
    result = ig.value
    wb.close()
    app.quit()
    return result

if __name__ == '__main__':
    olook = win32com.client.Dispatch("Outlook.Application")
    mail = olook.CreateItem(0)
    mail.Recipients.Add("3xxx@qq.com")
    mail.Subject = "test report"
    body_html = ""
    body_html = body_html + '<body>Hi all:<br/>以下是XXXXX項目今天的測試情況:<br/><br/>明天的測試計划:<br/><br/>目前的bug:'
    body_html = body_html + '<table width="1" border="1" cellspacing="1" cellpadding="1" height="100">'
    # 這里用rng 是因為這一次rng止步8強!
    rng_list = get_excel_date("D:\\reports\\Table.xlsx")
    # 表頭
    for tr_list in rng_list[:1]:
        body_html = body_html + "<tr>"
        for td_list in tr_list:
            # 這里也是奇葩需求,因為要求表頭不能換行,所以用了nowrap
            body_html = body_html + '<th bgcolor="#C3C3C3" nowrap="nowrap">' + td_list + '</th>'
        body_html = body_html + "</tr>"
    # 表內容
    for tr_list in rng_list[1:]:
        body_html = body_html + "<tr>"
        for td_list in tr_list:
            body_html = body_html + "<td>" + td_list + "</td>"
        body_html = body_html + "</tr>"
    body_html = body_html + '</table>'
    body_html = body_html + "</body>"
    mail.HTMLBody = body_html
    mail.Display(True)

 參考:https://www.yinyubo.cn/?p=339


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM