• 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

  • 相关阅读:
    第二次作业——评分!
    第一次点评!
    神经网络测试:利用分块patch输入的弊端
    利用分块进行网络输入测试
    python 用filter求解素数
    英语语法
    git clone 下载出现Time out
    路由转发
    获取用户密码
    后门维持
  • 原文地址:https://www.cnblogs.com/jackzz/p/10937544.html
Copyright © 2020-2023  润新知