Mam tę funkcję poniżej, która sprawia, że moja ramka danych jest ładna z obramowaniem i podświetleniem. Jednakże, ponieważ użyłem .style nie mogę użyć .to_html() do umieszczenia ramki danych w treści e-maila, więc używam .render(). Jednak gdy używam render(), formatowanie obramowań nieznacznie się zmienia. Poniżej znajduje się zdjęcie pokazujące, jak to wygląda w Pythonie, czyli tak, jak tego chcę, i inne zdjęcie, jak to wygląda w wiadomości e-mail. Masz jakiś pomysł, jak umieścić stylizowaną ramkę danych w treści wiadomości e-mail, zachowując formatowanie?

import win32com.client
import numpy as np
import pandas as pd
import datetime as dt
import time
import os

curr_date = dt.datetime.now().strftime("%Y%m%d")
csv = pd.read_csv("Pipeline_Signals_" + curr_date + ".csv", delimiter = ',')
df = pd.DataFrame(csv)
df = df1.replace(np.nan, '', regex=True)

def _color_red_or_green(val):
    color = 'red' if "*" in val else 'white'
    return 'background-color: %s' % color

df = (df.style
    .applymap(_color_red_or_green) 
    .set_table_styles([{'selector': 'th', 'props': [('border-color', 'black'),('background-color', 'white'), ('border-style','solid')]}])
    .hide_index() 
    .set_properties(**{'color': 'black',
                       'border-style' :'solid',
                       'border-color': 'black'}))

df1 = df.render()

import win32com.client

inbox = win32com.client.gencache.EnsureDispatch("Outlook.Application").GetNamespace("MAPI")
inbox = win32com.client.Dispatch("Outlook.Application")

mail = inbox.CreateItem(0x0)
mail.To = "test@test.co.uk"
mail.CC = "test@test.co.uk"
mail.Subject = "Test Signals " + curr_date

mail.HTMLBody = df1

mail.Display()

Tak wygląda dataframe w Pythonie i chcę, żeby wyglądała

enter image description here

Tak wygląda ramka danych, gdy umieszczam ją w treści wiadomości e-mail. Z jakiegoś powodu granice się zmieniają.

enter image description here

0
pythonlearner13 19 listopad 2019, 19:24
Gdybyś mógł wkleić źródło HTML swojej tabeli, byłoby łatwiej Ci pomóc.
 – 
jlesueur
19 listopad 2019, 20:22

1 odpowiedź

Wygląda na to, że pochodzi z arkusza CSS używanego domyślnie podczas wyświetlania tabeli. Powinieneś spróbować ustawić atrybut CSS „border-collapse” swojej tabeli na „collapse” podczas nadawania jej stylu. Jeśli to nie zadziała, spróbuj ustawić atrybut „border-spacing” na 0.

0
jlesueur 19 listopad 2019, 20:35