1. 程式人生 > >用 Python 生成 HTML 表格

用 Python 生成 HTML 表格

[標題]: # (用 Python 生成 HTML 表格) 在 **郵件報表** 之類的開發任務中,需要生成 *HTML* 表格。 使用 *Python* 生成 *HTML* 表格基本沒啥難度, *for* 迴圈遍歷一遍資料並輸出標籤即可。 如果需要實現合併單元格,或者按需調整表格樣式,就比較麻煩了。 這時,可以試試本文的主角 —— [html-table](https://github.com/fasionchan/py-html-table) 包,藉助它可生成各種樣式的 *HTML* 表格。 接下來,以一個簡單的例子演示 *html-table* 的常用用法: ![表格效果圖](https://python.fasionchan.com/zh_CN/latest/_images/997ad67a7f305a39e5a77e3bf86c7798.png) 開始之前,須通過 *pip* 安裝 [html-table](https://github.com/fasionchan/py-html-table) 包: ```sh $ python -m pip install html-table ``` 安裝完畢後,即可匯入 *HTMLTable* 類: ```python from HTMLTable import ( HTMLTable, ) ``` 建立一個新表格,標題為 **果園收成表** : ```python # 標題 table = HTMLTable(caption='果園收成表') ``` 附上表頭: ```python # 表頭行 table.append_header_rows(( ('名稱', '產量 (噸)', '環比', ''), ('', '', '增長量 (噸)', '增長率 (%)'), )) ``` 注意到,表頭分為兩行,有些單元格需要合併,被合併的單元格需要留空佔位。 合併單元格設定: ```python # 合併單元格 table[0][0].attr.rowspan = 2 table[0][1].attr.rowspan = 2 table[0][2].attr.colspan = 2 ``` *table[0]* 取出第一行,即第一個 ```` 標籤; *table[0][0]* 取出第一個單元格,對應 **名稱** ; *table[0][0].attr* 則是其標籤 ```` 的屬性。 該單元格合併下方一個單元格,需要將標籤屬性 *rowspan* 設定為 *2* 。 接著,加入資料,方法與表頭類似,總共有 *3* 行: ```python # 資料行 table.append_data_rows(( ('荔枝', 11, 1, 10), ('芒果', 9, -1, -10), ('香蕉', 6, 1, 20), )) ``` 至此,資料準備完畢,可以著手調整樣式。先設定表格標題樣式: ```python # 標題樣式 table.caption.set_style({ 'font-size': '15px', }) ``` 設定 ```` 標籤的樣式: ```python # 表格樣式,即
標籤樣式 table.set_style({ 'border-collapse': 'collapse', 'word-break': 'keep-all', 'white-space': 'nowrap', 'font-size': '14px', }) ``` 以上 *CSS* 樣式設定在 ``
`` 標籤上,作用於整個表格,影響表格邊框、字型大小等。 注意到,下面會覆蓋部分單元格(如表頭單元格)的字型大小。 接著,設定每個單元格的樣式,主要是規定邊框樣式: ```python # 統一設定所有單元格樣式,`` 標籤上; *set\_header\_cell\_style* 則將樣式設定到每個 ```` 標籤上,而不是 ``
table.set_cell_style({ 'border-color': '#000', 'border-width': '1px', 'border-style': 'solid', 'padding': '5px', }) ``` 接著,設定表頭單元格樣式,規定顏色、字型大小、以及填充大小: ```python # 表頭樣式 table.set_header_row_style({ 'color': '#fff', 'background-color': '#48a6fb', 'font-size': '18px', }) # 覆蓋表頭單元格字型樣式 table.set_header_cell_style({ 'padding': '15px', }) ``` *set\_header\_row\_style* 將樣式設定到表頭兩個 ``
`` 標籤上。 應該儘量將顏色等樣式設定到 ``
`` 標籤上,以精簡生成的 *HTML* 。 將次級表頭字型大小調小,不再贅述: ```python # 調小次表頭字型大小 table[1].set_cell_style({ 'padding': '8px', 'font-size': '15px', }) ``` 遍歷每個資料行,如果第 *2* 個單元格值小於 *0* ,設定樣式標紅背景顏色: ```python # 遍歷資料行,如果增長量為負,標紅背景顏色 for row in table.iter_data_rows(): if row[2].value < 0: row.set_style({ 'background-color': '#ffdddd', }) ``` 最後,生成 *HTML* 文字: ```python html = table.to_html() print(html) ``` # 附錄 更多 *Python* 技術文章,請檢視:[Python語言小冊](https://python.fasionchan.com) ,轉至 [原文](https://python.fasionchan.com/zh_CN/latest/libs/html-table.html) 可獲得最佳閱讀體驗。