在 郵件報表 之類的開發任務中,須要生成 HTML 表格。html
使用 Python 生成 HTML 表格基本沒啥難度, for 循環遍歷一遍數據並輸出標籤便可。 若是須要實現合併單元格,或者按需調整表格樣式,就比較麻煩了。python
這時,能夠試試本文的主角 —— html-table 包,藉助它可生成各類樣式的 HTML 表格。 接下來,以一個簡單的例子演示 html-table 的經常使用用法:git
開始以前,須經過 pip 安裝 html-table 包:github
$ python -m pip install html-table
安裝完畢後,便可導入 HTMLTable 類:編程
from HTMLTable import ( HTMLTable, )
建立一個新表格,標題爲 果園收成表 :微信
# 標題 table = HTMLTable(caption='果園收成表')
附上表頭:app
# 表頭行 table.append_header_rows(( ('名稱', '產量 (噸)', '環比', ''), ('', '', '增加量 (噸)', '增加率 (%)'), ))
注意到,表頭分爲兩行,有些單元格須要合併,被合併的單元格須要留空佔位。學習
合併單元格設置:字體
# 合併單元格 table[0][0].attr.rowspan = 2 table[0][1].attr.rowspan = 2 table[0][2].attr.colspan = 2
table[0] 取出第一行,即第一個 <tr>
標籤; table0 取出第一個單元格,對應 名稱 ; table0.attr 則是其標籤 <th>
的屬性。 該單元格合併下方一個單元格,須要將標籤屬性 rowspan 設置爲 2 。spa
接着,加入數據,方法與表頭相似,總共有 3 行:
# 數據行 table.append_data_rows(( ('荔枝', 11, 1, 10), ('芒果', 9, -1, -10), ('香蕉', 6, 1, 20), ))
至此,數據準備完畢,能夠着手調整樣式。先設置表格標題樣式:
# 標題樣式 table.caption.set_style({ 'font-size': '15px', })
設置 <table>
標籤的樣式:
# 表格樣式,即<table>標籤樣式 table.set_style({ 'border-collapse': 'collapse', 'word-break': 'keep-all', 'white-space': 'nowrap', 'font-size': '14px', })
以上 CSS 樣式設置在 <table>
標籤上,做用於整個表格,影響表格邊框、字體大小等。 注意到,下面會覆蓋部分單元格(如表頭單元格)的字體大小。
接着,設置每一個單元格的樣式,主要是規定邊框樣式:
# 統一設置全部單元格樣式,<td>或<th> table.set_cell_style({ 'border-color': '#000', 'border-width': '1px', 'border-style': 'solid', 'padding': '5px', })
接着,設置表頭單元格樣式,規定顏色、字體大小、以及填充大小:
# 表頭樣式 table.set_header_row_style({ 'color': '#fff', 'background-color': '#48a6fb', 'font-size': '18px', }) # 覆蓋表頭單元格字體樣式 table.set_header_cell_style({ 'padding': '15px', })
set_header_row_style 將樣式設置到表頭兩個 <tr>
標籤上; set_header_cell_style 則將樣式設置到每一個 <th>
標籤上。 應該儘可能將顏色等樣式設置到 <tr>
標籤上,而不是 <th>
標籤上,以精簡生成的 HTML 。
將次級表頭字體大小調小,再也不贅述:
# 調小次表頭字體大小 table[1].set_cell_style({ 'padding': '8px', 'font-size': '15px', })
遍歷每一個數據行,若是第 2 個單元格值小於 0 ,設置樣式標紅背景顏色:
# 遍歷數據行,若是增加量爲負,標紅背景顏色 for row in table.iter_data_rows(): if row[2].value < 0: row.set_style({ 'background-color': '#ffdddd', })
最後,生成 HTML 文本:
html = table.to_html() print(html)
更多 Python 技術文章,請查看:Python語言小冊
訂閱更新,獲取更多學習資料,請關注咱們的 微信公衆號 :