A little script to make an html table out of pandas. I made this type of stuff before, but I tried a different approach that maybe could bring to something more.
If you want to change the style of the table, there’s a lot of stuff on the net. You can use this tool too https://divtable.com/table-styler/
Update:
I changed the line in which I read excel this argument: engine=’openpyxl’ because with this engine there are no problem (like with xlrd).
import pandas as pd
import os
table_class = "rwd-table"
html = """<style>
@import "https://fonts.googleapis.com/css?family=Montserrat:300,400,700";
.rwd-table {
margin: 1em 0;
border: 1px;
min-width: 300px;
}
.rwd-table tr {border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; }
.rwd-table th {display: none; }
.rwd-table td {border:1; display: block; }
.rwd-table td:first-child {padding-top: .5em; }
.rwd-table td:last-child {padding-bottom: .5em; }
.rwd-table td:before {content: attr(data-th) ": "; font-weight: bold; width: 6.5em; display: inline-block; }
@media (min-width: 480px) {
.rwd-table td:before {display: none; }
} .rwd-table th, .rwd-table td {text-align: left;
}
@media (min-width: 480px) {
.rwd-table th, .rwd-table td {
display: table-cell; padding: .25em .5em; }
.rwd-table th:first-child,
.rwd-table td:first-child {padding-left: 0; }
.rwd-table th:last-child, .rwd-table td:last-child {padding-right: 0; } }
h1 {font-weight: normal; letter-spacing: -1px; color: #34495E; }
.rwd-table {background: #34495E; color: #fff; border-radius: .4em; overflow: hidden; }
.rwd-table tr {border-color: #46637f; }
.rwd-table th,
.rwd-table td {margin: .5em 1em; } @media (min-width: 480px) {
.rwd-table th, .rwd-table td {padding: 1em !important; } }
.rwd-table th, .rwd-table td:before {color: #dd5; } </style>
<script>
window.console = window.console || function(t) {};
</script>
<script>
if (document.location.search.match(/type=embed/gi)) {
window.parent.postMessage("resize", "*");
}
</script>"""
# df = pd.read_excel(filename, index=1)
df = pd.read_excel("001.xlsx", engine='openpyxl')
print(type(df))
print()
# df.to_html("data.html")
html += "<table class='rwd-table'>"
html2 = ""
add = ""
def header():
"Create the header of the column"
add = ""
for d in df:
add += f"<th>{d}</th>"
add += "<tr>"
return add
def content_of_table():
"This are the tds"
count = len(df)
add = ""
count = 0
for i in range(0, len(df)):
for d in df:
add += f"<td>{df[d][i]}</td>"
add += "<tr>"
return add
def main(html):
"Builds up the table with the functions made for it"
html += header()
html += content_of_table()
return html
html = main(html)
html += add
html += "</table>"
print(html)
with open("file.html", "w") as file:
file.write(html)
os.startfile("file.html")
The data were like this

The output is this

Changing style
You can easily change the style, like I show in the video
import pandas as pd
import os
table_class = "rwd-table"
html = """<style>
@import "https://fonts.googleapis.com/css?family=Montserrat:300,400,700";
.rwd-table {
margin: 1em 0;
border: 1px;
min-width: 300px;
}
.rwd-table tr {border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; }
.rwd-table th {display: none; }
.rwd-table td {border:1; display: block; }
.rwd-table td:first-child {padding-top: .5em; }
.rwd-table td:last-child {padding-bottom: .5em; }
.rwd-table td:before {content: attr(data-th) ": "; font-weight: bold; width: 6.5em; display: inline-block; }
@media (min-width: 480px) {
.rwd-table td:before {display: none; }
} .rwd-table th, .rwd-table td {text-align: left;
}
@media (min-width: 480px) {
.rwd-table th, .rwd-table td {
display: table-cell; padding: .25em .5em; }
.rwd-table th:first-child,
.rwd-table td:first-child {padding-left: 0; }
.rwd-table th:last-child, .rwd-table td:last-child {padding-right: 0; } }
h1 {font-weight: normal; letter-spacing: -1px; color: #34495E; }
.rwd-table {background: #34495E; color: #fff; border-radius: .4em; overflow: hidden; }
.rwd-table tr {border-color: #46637f; }
.rwd-table th,
.rwd-table td {margin: .5em 1em; } @media (min-width: 480px) {
.rwd-table th, .rwd-table td {padding: 1em !important; } }
.rwd-table th, .rwd-table td:before {color: #dd5; } </style>
<script>
window.console = window.console || function(t) {};
</script>
<script>
if (document.location.search.match(/type=embed/gi)) {
window.parent.postMessage("resize", "*");
}
</script>"""
html += """
<style>
table, td, th {
border: 1px solid black;
}
table {
width: 0;
border-collapse: collapse;
}
</style>
"""
html += """<style>
table.blueTable {
border: 1px solid #1C6EA4;
background-color: #EEEEEE;
width: 0%;
text-align: left;
border-collapse: collapse;
}
table.blueTable td, table.blueTable th {
border: 1px solid #AAAAAA;
padding: 3px 2px;
}
table.blueTable tbody td {
font-size: 13px;
}
table.blueTable tr:nth-child(even) {
background: #D0E4F5;
}
table.blueTable thead {
background: #1C6EA4;
background: -moz-linear-gradient(top, #5592bb 0%, #327cad 66%, #1C6EA4 100%);
background: -webkit-linear-gradient(top, #5592bb 0%, #327cad 66%, #1C6EA4 100%);
background: linear-gradient(to bottom, #5592bb 0%, #327cad 66%, #1C6EA4 100%);
border-bottom: 2px solid #444444;
}
table.blueTable thead th {
font-size: 15px;
font-weight: bold;
color: #FFFFFF;
border-left: 2px solid #D0E4F5;
}
table.blueTable thead th:first-child {
border-left: none;
}
table.blueTable tfoot {
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
background: #D0E4F5;
background: -moz-linear-gradient(top, #dcebf7 0%, #d4e6f6 66%, #D0E4F5 100%);
background: -webkit-linear-gradient(top, #dcebf7 0%, #d4e6f6 66%, #D0E4F5 100%);
background: linear-gradient(to bottom, #dcebf7 0%, #d4e6f6 66%, #D0E4F5 100%);
border-top: 2px solid #444444;
}
table.blueTable tfoot td {
font-size: 14px;
}
table.blueTable tfoot .links {
text-align: right;
}
table.blueTable tfoot .links a{
display: inline-block;
background: #1C6EA4;
color: #FFFFFF;
padding: 2px 8px;
border-radius: 5px;
}
</style>
"""
# df = pd.read_excel(filename, index=1)
df = pd.read_excel("001.xlsx", engine='openpyxl')
# df.to_html("001.html")
html += "<table class='blueTable'>"
# html += "<table>"
html2 = ""
add = ""
def header():
"Create the header of the column"
add = ""
for d in df:
add += f"<th>{d}</th>"
add += "<tr>"
return add
def content_of_table():
"This are the tds"
add = ""
for i in range(0, len(df)):
for d in df:
add += f"<td>{df[d][i]}</td>"
add += "<tr>"
return add
def main(html):
"Builds up the table with the functions made for it"
html += header()
html += content_of_table()
return html
html = main(html)
html += "</table>"
print(html)
with open("file.html", "w") as file:
file.write(html)
os.startfile("file.html")
Subscribe to the newsletter for updates
Tkinter templatesTwitter: @pythonprogrammi - python_pygame
Claude's Games
1. Memory gameVideos
Speech recognition gamePygame's Platform Game