Я пытаюсь автоматизировать задачу создания электронной почты, но у меня возникли некоторые проблемы.Я использую 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
Любая помощь будет в основном приветствуется!Если необходима дополнительная информация, пожалуйста, дайте мне знать!
Приветствия, Алекс