Python代碼實(shí)現(xiàn)將HTML轉(zhuǎn)換為Excel
在處理網(wǎng)頁(yè)數(shù)據(jù)、在線報(bào)表或 HTML 格式的文檔時(shí),將其轉(zhuǎn)換為 Excel 格式是一項(xiàng)非常實(shí)用的技能。Excel 提供了強(qiáng)大的數(shù)據(jù)處理、分析和可視化功能,使得原本僅用于展示的 HTML 表格數(shù)據(jù)變得更加靈活和可操作。通過(guò)程序化方式實(shí)現(xiàn) HTML 到 Excel 的轉(zhuǎn)換,可以自動(dòng)化數(shù)據(jù)采集、報(bào)表整理和數(shù)據(jù)遷移等工作流程。
本文將詳細(xì)介紹如何使用 Spire.XLS for Python 庫(kù)將 HTML 內(nèi)容轉(zhuǎn)換為 Excel 工作簿。我們將涵蓋從 HTML 文件直接轉(zhuǎn)換、HTML 字符串插入單元格、以及實(shí)際應(yīng)用場(chǎng)景中的最佳實(shí)踐,幫助你輕松實(shí)現(xiàn)網(wǎng)頁(yè)數(shù)據(jù)到電子表格的轉(zhuǎn)換。
環(huán)境準(zhǔn)備
在開(kāi)始之前,你需要安裝 Spire.XLS for Python 庫(kù)。可以使用 pip 命令進(jìn)行安裝:
pip install Spire.XLS
安裝完成后,你就可以在 Python 項(xiàng)目中使用該庫(kù)來(lái)處理 HTML 與 Excel 之間的轉(zhuǎn)換了。
HTML 轉(zhuǎn) Excel 的應(yīng)用場(chǎng)景
在實(shí)際工作中,HTML 轉(zhuǎn) Excel 有多種典型應(yīng)用場(chǎng)景:
- 網(wǎng)頁(yè)數(shù)據(jù)抓取:將網(wǎng)頁(yè)上的表格數(shù)據(jù)提取并保存為 Excel 格式
- 報(bào)表轉(zhuǎn)換:將 HTML 格式的報(bào)表轉(zhuǎn)換為可編輯的 Excel 文件
- 數(shù)據(jù)遷移:從基于 Web 的系統(tǒng)導(dǎo)出數(shù)據(jù)并轉(zhuǎn)換為 Excel 進(jìn)行分析
- 檔案整理:將歷史 HTML 文檔中的表格數(shù)據(jù)整理為結(jié)構(gòu)化電子表格
- 自動(dòng)化處理:在數(shù)據(jù)處理流水線中自動(dòng)將 HTML 輸入轉(zhuǎn)換為 Excel 輸出
Spire.XLS for Python 提供了簡(jiǎn)潔的 API 來(lái)滿足這些轉(zhuǎn)換需求,讓你能夠高效地處理 HTML 數(shù)據(jù)。
從 HTML 文件轉(zhuǎn)換為 Excel
最基本的轉(zhuǎn)換操作是直接將 HTML 文件加載并保存為 Excel 格式。以下示例展示了如何完成這一基本任務(wù):
from spire.xls import *
from spire.xls.common import *
def ConvertHtmlToExcel():
"""將 HTML 文件轉(zhuǎn)換為 Excel"""
inputFile = "/input/表格.html"
outputFile = "/output/Html轉(zhuǎn)Excel.xlsx"
# 創(chuàng)建工作簿對(duì)象
workbook = Workbook()
# 從 HTML 文件加載內(nèi)容
workbook.LoadFromHtml(inputFile)
# 保存為 Excel 格式(Excel 2013)
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
if __name__ == "__main__":
ConvertHtmlToExcel()

在這個(gè)示例中,我們使用 LoadFromHtml() 方法直接加載 HTML 文件,然后調(diào)用 SaveToFile() 方法將其保存為 Excel 格式。這種方法適用于包含表格結(jié)構(gòu)的完整 HTML 文件,Spire.XLS 會(huì)自動(dòng)解析 HTML 中的 <table> 標(biāo)簽并將其轉(zhuǎn)換為 Excel 工作表中的行列結(jié)構(gòu)。
需要注意的是,HTML 中的樣式、合并單元格等格式信息也會(huì)被盡可能保留,但某些復(fù)雜的 CSS 樣式可能無(wú)法完全映射到 Excel 格式中。
將 HTML 字符串插入單元格
有時(shí)你可能不需要轉(zhuǎn)換整個(gè) HTML 文件,而是希望將一段 HTML 代碼插入到 Excel 的特定單元格中。這種情況下,可以使用單元格的 HtmlString 屬性。以下是具體實(shí)現(xiàn):
from spire.xls import *
from spire.xls.common import *
def InsertHtmlIntoCell():
"""將 HTML 字符串插入 Excel 單元格"""
outputFile = "InsertHtmlStringIntoCell.xlsx"
# 創(chuàng)建工作簿
workbook = Workbook()
# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]
# 定義 HTML 字符串
htmlCode = "<div>第一行<strong>第二行(加粗)</strong>第三行</div>"
# 將 HTML 字符串插入到 A1 單元格
cell_range = sheet["A1"]
cell_range.HtmlString = htmlCode
# 保存文件
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()
print(f"HTML 字符串已插入,Excel 文件已保存至: {outputFile}")
if __name__ == "__main__":
InsertHtmlIntoCell()

這個(gè)示例展示了如何將 HTML 字符串直接賦值給單元格的 HtmlString 屬性。Spire.XLS 會(huì)解析 HTML 標(biāo)簽并在單元格內(nèi)渲染格式化文本。在這個(gè)例子中,<strong> 標(biāo)簽會(huì)使文本加粗,<div> 標(biāo)簽會(huì)創(chuàng)建換行效果。
這種方法特別適合需要在 Excel 中保留富文本格式的場(chǎng)景,例如從數(shù)據(jù)庫(kù)中提取帶有 HTML 標(biāo)記的內(nèi)容并導(dǎo)入到 Excel 中。
實(shí)用技巧與高級(jí)應(yīng)用
處理包含多個(gè)表格的 HTML 文件
當(dāng) HTML 文件中包含多個(gè)表格時(shí),Spire.XLS 會(huì)將每個(gè)表格轉(zhuǎn)換為單獨(dú)的工作表。你可以通過(guò)以下方式進(jìn)行控制:
from spire.xls import *
from spire.xls.common import *
def ConvertMultiTableHtml():
"""轉(zhuǎn)換包含多個(gè)表格的 HTML 文件"""
inputFile = "./Demos/Data/MultiTable.html"
outputFile = "MultiTableExcel.xlsx"
# 創(chuàng)建工作簿并加載 HTML
workbook = Workbook()
workbook.LoadFromHtml(inputFile)
# 遍歷所有工作表并重命名
for i in range(workbook.Worksheets.Count):
sheet = workbook.Worksheets[i]
sheet.Name = f"表格_{i + 1}"
# 自動(dòng)調(diào)整列寬以適應(yīng)內(nèi)容
sheet.AllocatedRange.AutoFitColumns()
# 保存文件
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()
print(f"多表格 HTML 轉(zhuǎn)換完成,文件已保存至: {outputFile}")
if __name__ == "__main__":
ConvertMultiTableHtml()
這個(gè)示例展示了如何處理包含多個(gè)表格的 HTML 文件。加載后,每個(gè) HTML 表格會(huì)成為獨(dú)立的工作表。通過(guò)遍歷工作表集合,你可以為每個(gè)工作表設(shè)置有意義的名稱,并自動(dòng)調(diào)整列寬以優(yōu)化顯示效果。
從 URL 加載 HTML 并轉(zhuǎn)換
在實(shí)際應(yīng)用中,你可能需要直接從網(wǎng)頁(yè) URL 獲取 HTML 內(nèi)容并轉(zhuǎn)換為 Excel。以下是一個(gè)完整的示例:
import urllib.request
from spire.xls import *
from spire.xls.common import *
import tempfile
import os
def ConvertUrlToExcel(url, output_file):
"""從 URL 加載 HTML 并轉(zhuǎn)換為 Excel"""
# 下載 HTML 內(nèi)容
print(f"正在下載: {url}")
response = urllib.request.urlopen(url)
html_content = response.read().decode('utf-8')
# 創(chuàng)建臨時(shí) HTML 文件
with tempfile.NamedTemporaryFile(mode='w', suffix='.html', delete=False, encoding='utf-8') as temp_file:
temp_file.write(html_content)
temp_html_path = temp_file.name
try:
# 創(chuàng)建工作簿并加載 HTML
workbook = Workbook()
workbook.LoadFromHtml(temp_html_path)
# 自動(dòng)調(diào)整所有工作表的列寬
for sheet in workbook.Worksheets:
sheet.AllocatedRange.AutoFitColumns()
# 保存為 Excel
workbook.SaveToFile(output_file, ExcelVersion.Version2013)
workbook.Dispose()
print(f"轉(zhuǎn)換完成,Excel 文件已保存至: {output_file}")
finally:
# 清理臨時(shí)文件
if os.path.exists(temp_html_path):
os.remove(temp_html_path)
def main():
# 示例:從網(wǎng)頁(yè)轉(zhuǎn)換(請(qǐng)?zhí)鎿Q為實(shí)際 URL)
# ConvertUrlToExcel(
# "https://example.com/data-table.html",
# "WebData.xlsx"
# )
print("URL 轉(zhuǎn)換函數(shù)已定義,取消注釋 main() 中的代碼即可使用")
if __name__ == "__main__":
main()
這個(gè)示例展示了如何從網(wǎng)絡(luò) URL 獲取 HTML 內(nèi)容并轉(zhuǎn)換為 Excel。首先使用 urllib 下載 HTML 內(nèi)容,然后創(chuàng)建臨時(shí)文件供 Spire.XLS 加載,最后清理臨時(shí)文件。這種方法非常適合自動(dòng)化數(shù)據(jù)采集和處理流程。
批量轉(zhuǎn)換 HTML 文件
如果你需要處理多個(gè) HTML 文件,可以使用以下批量轉(zhuǎn)換工具類:
import os
from spire.xls import *
from spire.xls.common import *
class HtmlToExcelConverter:
"""HTML 轉(zhuǎn) Excel 批量轉(zhuǎn)換器"""
def __init__(self, output_folder=None):
self.output_folder = output_folder or "./Excel_Output"
# 創(chuàng)建輸出文件夾
if not os.path.exists(self.output_folder):
os.makedirs(self.output_folder)
def convert_single_file(self, input_file, output_file=None):
"""轉(zhuǎn)換單個(gè) HTML 文件為 Excel"""
try:
workbook = Workbook()
workbook.LoadFromHtml(input_file)
# 自動(dòng)調(diào)整所有工作表的列寬
for sheet in workbook.Worksheets:
sheet.AllocatedRange.AutoFitColumns()
if output_file is None:
base_name = os.path.splitext(os.path.basename(input_file))[0]
output_file = os.path.join(self.output_folder, f"{base_name}.xlsx")
workbook.SaveToFile(output_file, ExcelVersion.Version2013)
workbook.Dispose()
print(f"? 轉(zhuǎn)換成功: {os.path.basename(input_file)}")
return True
except Exception as e:
print(f"? 轉(zhuǎn)換失敗 {os.path.basename(input_file)}: {str(e)}")
return False
def batch_convert(self, input_folder):
"""批量轉(zhuǎn)換文件夾中的所有 HTML 文件"""
html_files = []
# 查找所有 HTML 文件
for filename in os.listdir(input_folder):
if filename.lower().endswith(('.html', '.htm')):
html_files.append(os.path.join(input_folder, filename))
if not html_files:
print(f"在 {input_folder} 中未找到 HTML 文件")
return
print(f"找到 {len(html_files)} 個(gè) HTML 文件,開(kāi)始轉(zhuǎn)換...")
success_count = 0
fail_count = 0
for html_file in html_files:
if self.convert_single_file(html_file):
success_count += 1
else:
fail_count += 1
print(f"\n轉(zhuǎn)換完成!")
print(f"成功: {success_count} 個(gè)文件")
print(f"失敗: {fail_count} 個(gè)文件")
print(f"輸出目錄: {self.output_folder}")
def main():
# 創(chuàng)建轉(zhuǎn)換器實(shí)例
converter = HtmlToExcelConverter("./Excel_Output")
# 批量轉(zhuǎn)換
converter.batch_convert("./HTML_Files")
# 或者轉(zhuǎn)換單個(gè)文件
# converter.convert_single_file("./Data/Table.html")
if __name__ == "__main__":
main()
這個(gè)工具類提供了單文件轉(zhuǎn)換和批量轉(zhuǎn)換功能,支持自動(dòng)調(diào)整列寬和錯(cuò)誤處理。你可以將其集成到數(shù)據(jù)處理流水線中,實(shí)現(xiàn)自動(dòng)化的 HTML 到 Excel 轉(zhuǎn)換。
轉(zhuǎn)換質(zhì)量?jī)?yōu)化建議
為了獲得最佳的 Excel 輸出效果,注意以下幾點(diǎn):
HTML 結(jié)構(gòu)要求
- 確保 HTML 中的表格使用標(biāo)準(zhǔn)的
<table>、<tr>、<td>標(biāo)簽 - 避免使用過(guò)于復(fù)雜的嵌套表格結(jié)構(gòu)
- 檢查 HTML 語(yǔ)法是否正確,避免標(biāo)簽未閉合
格式處理
- 簡(jiǎn)單的 CSS 樣式(如字體加粗、顏色)通??梢员A?/li>
- 復(fù)雜的布局和定位可能無(wú)法完全映射到 Excel
- 圖片和多媒體元素不會(huì)被轉(zhuǎn)換
性能考慮
- 大型 HTML 文件轉(zhuǎn)換時(shí)可能需要較長(zhǎng)時(shí)間
- 批量處理時(shí)注意內(nèi)存使用情況
- 轉(zhuǎn)換完成后及時(shí)調(diào)用
Dispose()釋放資源
常見(jiàn)問(wèn)題與解決方案
問(wèn)題 1:轉(zhuǎn)換后的數(shù)據(jù)格式不正確
解決方案:檢查 HTML 表格結(jié)構(gòu)是否規(guī)范,確保使用正確的 <table> 標(biāo)簽。對(duì)于特殊數(shù)據(jù)類型(如日期、數(shù)字),可以在轉(zhuǎn)換后使用 Excel 的格式化工具進(jìn)行調(diào)整。
問(wèn)題 2:中文或其他特殊字符顯示異常
解決方案:確保 HTML 文件使用 UTF-8 編碼,并在加載時(shí)指定正確的編碼設(shè)置。可以在 HTML 文件的 <head> 部分添加 <meta charset="UTF-8"> 標(biāo)簽。
問(wèn)題 3:表格邊框或樣式丟失
解決方案:HTML 到 Excel 的轉(zhuǎn)換主要關(guān)注數(shù)據(jù)結(jié)構(gòu),樣式可能會(huì)簡(jiǎn)化。如果需要保留特定樣式,可以在轉(zhuǎn)換后使用 Spire.XLS 的格式化 API 重新應(yīng)用樣式。
總結(jié)
本文深入探討了利用 Spire.XLS for Python 將 HTML 轉(zhuǎn)換為 Excel 的核心技術(shù)與多種實(shí)現(xiàn)路徑。在實(shí)際應(yīng)用中,開(kāi)發(fā)者既可以通過(guò) LoadFromHtml() 方法直接將本地 HTML 文件或從特定 URL 下載的網(wǎng)頁(yè)源文件轉(zhuǎn)換為 Excel 工作薄,也可以借助單元格的 HtmlString 屬性將富文本字符串精準(zhǔn)嵌入特定區(qū)域;針對(duì)復(fù)雜的網(wǎng)頁(yè)結(jié)構(gòu),系統(tǒng)還會(huì)自動(dòng)將多個(gè) HTML 表格智能拆分為獨(dú)立的工作表進(jìn)行存儲(chǔ)。為了在網(wǎng)頁(yè)數(shù)據(jù)采集、報(bào)表自動(dòng)化及數(shù)據(jù)遷移等實(shí)戰(zhàn)場(chǎng)景中大幅提升工作效率,建議在開(kāi)發(fā)時(shí)建立封裝工具類以實(shí)現(xiàn)高效的批量處理,并嚴(yán)格注意 HTML 結(jié)構(gòu)的規(guī)范性與全局編碼設(shè)置。全面掌握并靈活運(yùn)用這些 HTML 轉(zhuǎn) Excel 的轉(zhuǎn)換技術(shù),不僅能幫助我們打破跨平臺(tái)數(shù)據(jù)格式的壁壘,更能為企業(yè)級(jí)自動(dòng)化數(shù)據(jù)流轉(zhuǎn)與精細(xì)化報(bào)表沉淀提供強(qiáng)有力的技術(shù)支撐。
到此這篇關(guān)于Python代碼實(shí)現(xiàn)將HTML轉(zhuǎn)換為Excel的文章就介紹到這了,更多相關(guān)Python HTML轉(zhuǎn)Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)將HTML表格一鍵導(dǎo)出為Excel(xlsx)的實(shí)戰(zhàn)指南
- Python實(shí)現(xiàn)將HTML表格一鍵導(dǎo)出為Excel
- Python借助Spire.XLS高效實(shí)現(xiàn)Excel到HTML的轉(zhuǎn)換
- 利用Python實(shí)現(xiàn)Excel表格轉(zhuǎn)換為HTML格式
- 利用Python將Excel快速轉(zhuǎn)換成HTML的代碼實(shí)現(xiàn)
- Python實(shí)現(xiàn)Excel表格轉(zhuǎn)HTML
- python pandas實(shí)現(xiàn)excel轉(zhuǎn)為html格式的方法
- python抓取某汽車網(wǎng)數(shù)據(jù)解析html存入excel示例
相關(guān)文章
Tornado協(xié)程在python2.7如何返回值(實(shí)現(xiàn)方法)
下面小編就為大家?guī)?lái)一篇Tornado協(xié)程在python2.7如何返回值(實(shí)現(xiàn)方法)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
使用 PyTorch-BigGraph 構(gòu)建和部署大規(guī)模圖嵌入的完整步驟
本文深入探討了使用 PyTorch-BigGraph (PBG) 構(gòu)建和部署大規(guī)模圖嵌入的完整流程,涵蓋了從環(huán)境設(shè)置、數(shù)據(jù)準(zhǔn)備、模型配置與訓(xùn)練,到高級(jí)優(yōu)化技術(shù)、評(píng)估指標(biāo)、部署策略以及實(shí)際案例研究等各個(gè)方面,感興趣的朋友跟隨小編一起看看吧2024-11-11
LyScript實(shí)現(xiàn)內(nèi)存交換與差異對(duì)比的方法詳解
LyScript?針對(duì)內(nèi)存讀寫函數(shù)的封裝功能并不多,只提供了內(nèi)存讀取和內(nèi)存寫入函數(shù)的封裝,本篇文章將繼續(xù)對(duì)API進(jìn)行封裝,實(shí)現(xiàn)一些在軟件逆向分析中非常實(shí)用的功能,需要的可以參考一下2022-08-08
關(guān)于Python中*args和**kwargs的深入理解
這篇文章主要給大家介紹了關(guān)于Python中*args和**kwargs的相關(guān)資料,*args和**kwargs代表的是變量, 變量前面的 *(星號(hào))才是必須的,也可以寫成*v和**vs;寫成*args和**kwargs只是一個(gè)常用的書寫方式,需要的朋友可以參考下2021-08-08
Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,無(wú)序鏈表詳解
這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03

