我正在尝试自动执行电子邮件创建任务,但是我遇到了一些问题。 我正在使用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
任何帮助将不胜感激!如果需要其他信息,请告诉我!
干杯, 亚历克斯