使用Python和XLWINGS自动创建Outlook电子邮件的问题

时间:2018-12-17 09:52:12

标签: python excel outlook xlwings

我正在尝试自动执行电子邮件创建任务,但是我遇到了一些问题。 我正在使用Python和XLWings从Excel获取数据。 这适用于电子邮件正文内容的第一部分,其中我从一些熊猫计算中创建了一个html表-这很完美!

尽管如此,我仍然必须从excel和一些图表中插入一个范围-这是一个有点棘手的地方...我设法插入了将图表复制-手动-手动复制到剪贴板,然后粘贴的图表他们使用:

inspector = newMail.GetInspector
editor = inspector.WordEditor
editor.Select()
editor.Application.Selection.Start = editor.Application.Selection.End
editor.Application.Selection.Paste()

无论如何,我仍然找不到找到将它们从Python直接复制到剪贴板或直接复制到电子邮件正文的方法。这里有什么想法吗?

第二,我需要将一个范围从Excel复制到Outlook。我相信我可以将数据读入pandas数据框中,应用必要的过滤器和计算,然后再使用HTML将其发送到电子邮件内容。这将工作,但我也需要保持格式。有什么想法吗?

下面是完整代码:

def EmailCreator(SaveAsAdress):
    #create date
    now = datetime.datetime.now() - timedelta(days=7)
    #create e-mail content
    subject = '[Analyse Test PIM] CR Analyse Tests PIM S' + now.strftime("%U - %Y")

    attachments = [SaveAsAdress]
    TOrecipients = ''
    CCrecipients = ''

    for i in range(2,shtEmail.range('A1').end('down').row+1):
        TOrecipients = TOrecipients + ';' + str(shtEmail.range('A' + str(i)).value)
    for i in range(2,shtEmail.range('B1').end('down').row+1):
        CCrecipients = CCrecipients + ';' + str(shtEmail.range('B' + str(i)).value)

    sWeek = "S" + now.strftime("%U")        

    df = sht1.range('A1').expand().options(pd.DataFrame, index=False).value 
    sGCRinWeek = df.loc[df['Semaine'] == sWeek, 'Numéro GCR Traite']
    sGCRinWeek = sGCRinWeek.unique()
    sGCRinWeek2 = np.array2string(sGCRinWeek, precision=2, separator=', ')
    iSiteNonTeste =  df.query("Semaine ==  @sWeek & Résultat == 'Non testé'")["N°Site T"].count()
    iGCR = df[df["Semaine"]== sWeek].count()["Semaine"]
#    sht1.range('A1').copypicture()
#    sht1.range("A1:B2").CopyPicture(Format= win32c.xlBitmap)
#    img = ImageGrab.grabclipboard()

    #create e-mail
    olMailItem = 0x0
    obj = win32com.client.Dispatch("Outlook.Application")
    newMail = obj.CreateItem(olMailItem)
    body = """\
    <html>
        <body>
            <p>Bonjour,<br>
            <p>Veuillez trouver ci-dessous le compte-rendu d’Analyse Test PIM de le semaine S""" + now.strftime("%U - %Y") +  """: </p>
            <p></p>
               <p style="margin-left: 40px"><b> - <u>     Périmètre de l’opération</u></b></p>
                    <table  border="1",  style="margin-left: 40px">
                      <tr align="center">
                        <thead>  
                        <th>Constructeur</th>
                        <th>Semaine</th>
                        <th>Nombres des GCR's</th>
                        <th>GCR Traité</th>
                        <th>Volume Sites Total</th>
                        <th>Volume Sites Analysés</th>
                        </thead>
                      </tr>
                      <tr align="center">
                        <td>Huawei</td>
                        <td>"""+ sWeek + """</td>
                        <td>""" + str(sGCRinWeek.size) + """</td>
                        <td>"""+ sGCRinWeek2 + """</td>
                        <td>""" + str(iGCR) + """</td>
                        <td>""" + str(iGCR - iSiteNonTeste) + """</td>
                      </tr>
                    </table>    
               <p style="margin-left: 40px"><b> - <u>     Pièces-jointes</u></b></p>
               <p style="margin-left: 60px">     o  Synthèse de l’analyse Tests PIM</p>
               <p style="margin-left: 40px"><b> - <u>     Synthèse de l’opération</u></b></p>
               <p style="margin-left: 40px"><b> - <u>     Synthèse du résultat de l’analyse</u></b></p>
               <p></p>
               <p></p>
               <p></p>
               <p style="margin-left: 40px"><b> - <u>     Porteur d’action suite à l’analyse </u></b></p>
               <p> </p>
               <p> </p>
               <p> </p>
        </body>
        <small><i><b><em> Cette e-mail a été creer automatique de Python & XlWings.</em></b></i></small>
    </html>
    """     
    newMail.display()
    newMail.Subject = subject
    newMail.HTMLBody = body
    inspector = newMail.GetInspector
    editor = inspector.WordEditor
    editor.Select()
    editor.Application.Selection.Start = editor.Application.Selection.End
    editor.Application.Selection.Paste()
    newMail.To = TOrecipients
    newMail.CC = CCrecipients
    for location in attachments:
        newMail.Attachments.Add(Source=location)
    newMail.GetInspector   

任何帮助将不胜感激!如果需要其他信息,请告诉我!

干杯, 亚历克斯

0 个答案:

没有答案