Проблемы автоматизации создания электронной почты Outlook с использованием Python и XLWINGS - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь автоматизировать задачу создания электронной почты, но у меня возникли некоторые проблемы.Я использую 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   

Любая помощь будет в основном приветствуется!Если необходима дополнительная информация, пожалуйста, дайте мне знать!

Приветствия, Алекс

...