表格HTML输出在python中显示为单列

2024-05-31 19:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

import csv
from tabulate import tabulate
from openpyxl import load_workbook
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
me = 'xxx@gmail.com'
password = 'yyyzzz!!2'
server = 'smtp.gmail.com:587'
you = 'qqq@gmail.com'


text = """
Hello, Friend.
{table}

Regards,

Me"""

html = """
<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""
filepath="D:/Development_Avecto/Python/Associate_AppLens_Defaulters_Nov1-Dec4.xlsx"
data_list=[]
temp_csv=""
workbook = load_workbook(filepath)
sheet_data = workbook[str('%')]
Ws_range= sheet_data['A':'D']
for row in Ws_range:
for cell in row:
    print(cell.value)
    temp_csv = temp_csv + str(cell.value) + "~"
    data_list.append(temp_csv)



 text = text.format(table=tabulate(data_list, headers="firstrow", tablefmt="grid"))
 html = html.format(table=tabulate(data_list, headers="firstrow", tablefmt="html"))

 message = MIMEMultipart(
   "alternative", None, [MIMEText(text), MIMEText(html,'html')])

 message['Subject'] = "Your data"
 message['From'] = me
 message['To'] = you
 server = smtplib.SMTP(server)
 server.ehlo()
 server.starttls()
 server.login(me, password)
 server.sendmail(me, you, message.as_string())
 server.quit()

需要关于如何在多个列中显示数据的帮助,因为我在excel中有四列,但现在所有四列都显示为单列

目前,它正在从excel中读取数据并邮寄内容,但它显示为单列

请帮助我解决我使用的python3.6


Tags: csvtextfromimportmessagedataserverhtml
1条回答
网友
1楼 · 发布于 2024-05-31 19:23:05

您应该将其转换为列表列表,如

data_list = [['A', 'B', 'C'], [1, 2, 3]]

使用类似

data_list = []

for row in Ws_range:

    row_list = []

    for cell in row:
        print(cell.value)
        row_list.append(cell.value)

    data_list.append(row_list)

最小工作示例

from tabulate import tabulate

html = """
<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""

data_list = [['A', 'B', 'C'], [1, 2, 3]]

print(html.format(table=tabulate(data_list, headers="firstrow", tablefmt="html")))

print(tabulate(data_list, headers="firstrow", tablefmt="text"))

结果:

<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
<table>
<thead>
<tr><th style="text-align: right;">  A</th><th style="text-align: right;">  B</th><th style="text-align: right;">  C</th></tr>
</thead>
<tbody>
<tr><td style="text-align: right;">  1</td><td style="text-align: right;">  2</td><td style="text-align: right;">  3</td></tr>
</tbody>
</table>
<p>Regards,</p>
<p>Me</p>
</body></html>

  A    B    C
 -   -   -
  1    2    3

编辑:对于pandas.DataFrame您还必须转换为listd列表,但DataFrame具有此功能

也可以与tabulate一起使用的numpy数组

 data_list = df.values

或列表

 data_list = df.values.tolist()

from tabulate import tabulate
import pandas as pd

html = """
<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""

df = pd.DataFrame([['A', 'B', 'C'], [1, 2, 3]])

data_list = df.values

print(html.format(table=tabulate(data_list, headers="firstrow", tablefmt="html")))

print(tabulate(data_list, headers="firstrow", tablefmt="text"))

相关问题 更多 >