在企业数据管理与信息分享场景中,Excel 文件虽然功能强大,但在跨平台浏览、在线展示和快速分享方面存在局限性。许多用户需要将 Excel 表格发布到网页上,供团队成员在线查看,或将其嵌入到内部系统中进行数据展示。然而,手动将 Excel 转换为 HTML 不仅操作繁琐,还难以保持原有的格式、样式和图片。特别是在处理大量报表或需要自动化生成网页报告时,编程方式成为最高效的解决方案。
本文将介绍如何使用 Python 将 Excel 工作表或整个工作簿转换为 HTML 格式,保留原始数据的结构、样式和图表。整个过程可以实现完全自动化,适用于财务报表在线发布、业务数据看板、项目进度跟踪页面等场景。
本文使用的方法需要用到 Free Spire.XLS for Python,可通过 pip 安装:
pip install spire.xls.free
首先创建一个包含示例数据的 Excel 文件,然后将其转换为 HTML。我们模拟一个销售团队的季度业绩报表:
from spire.xls import Workbook, ExcelVersion
outputFile = "SalesReport.xlsx"
# 创建一个新的工作簿
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "Q1销售业绩"
# 写入表头
headers = ["销售人员", "第一季度", "第二季度", "第三季度", "第四季度", "年度总计"]
for col, header in enumerate(headers, start=1):
sheet.Range[1, col].Text = header
sheet.Range[1, col].Style.Font.IsBold = True
# 写入示例数据
sales_data = [
["张三", 125000, 138000, 142000, 156000, 561000],
["李四", 98000, 112000, 125000, 134000, 469000],
["王五", 145000, 152000, 168000, 175000, 640000],
["赵六", 87000, 95000, 102000, 118000, 402000],
]
for row, data in enumerate(sales_data, start=2):
for col, value in enumerate(data, start=1):
if isinstance(value, str):
sheet.Range[row, col].Value = value
else:
sheet.Range[row, col].NumberValue = value
sheet.Range[row, col].Style.NumberFormat = "#,##0"
# 自动调整列宽
sheet.Range.AutoFitColumns()
# 保存 Excel 文件
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()
print("Excel 文件已创建:SalesReport.xlsx")
说明:
Workbook() 创建新的 Excel 工作簿对象Worksheets[0] 获取第一个工作表,默认工作簿包含三个工作表Range[row, col] 通过行列索引访问单元格NumberFormat 设置数字格式,使金额更易读AutoFitColumns() 自动调整列宽以适应内容此步骤创建了包含销售数据的 Excel 文件,为后续 HTML 转换提供源文件。
接下来,我们将加载刚才创建的 Excel 文件,并将第一个工作表转换为 HTML 格式:
from spire.xls import Workbook, HTMLOptions
inputFile = "SalesReport.xlsx"
outputFile = "SalesReport_Sheet.html"
# 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 创建 HTML 选项并设置图片嵌入
options = HTMLOptions()
options.ImageEmbedded = True
# 将工作表转换为 HTML
sheet.SaveToHtml(outputFile)
workbook.Dispose()
print("工作表已转换为 HTML:SalesReport_Sheet.html")
说明:
LoadFromFile() 从磁盘加载现有的 Excel 文件HTMLOptions() 创建 HTML 转换选项对象ImageEmbedded = True 设置图片以 Base64 编码嵌入 HTML 中,避免外部依赖SaveToHtml() 将工作表内容导出为 HTML 文件工作表预览:

注意事项:
ImageEmbedded 选项当 Excel 文件包含多个工作表时,可以使用工作簿级别的转换方法,将所有工作表一次性转换为 HTML:
from spire.xls import Workbook
inputFile = "MultiSheetReport.xlsx"
outputFile = "MultiSheetReport.html"
# 创建包含多个工作表的 Excel 文件
workbook = Workbook()
# 第一个工作表 - 销售数据
sheet1 = workbook.Worksheets[0]
sheet1.Name = "销售数据"
sheet1.Range["A1"].Text = "产品名称"
sheet1.Range["B1"].Text = "销量"
sheet1.Range["C1"].Text = "销售额"
sheet1.Range["A2"].Text = "笔记本电脑"
sheet1.Range["B2"].NumberValue = 1250
sheet1.Range["C2"].NumberValue = 6250000
sheet1.Range["A3"].Text = "平板电脑"
sheet1.Range["B3"].NumberValue = 890
sheet1.Range["C3"].NumberValue = 2670000
# 第二个工作表 - 库存数据
sheet2 = workbook.Worksheets.Add("库存数据")
sheet2.Range["A1"].Text = "产品名称"
sheet2.Range["B1"].Text = "库存数量"
sheet2.Range["C1"].Text = "仓库位置"
sheet2.Range["A2"].Text = "笔记本电脑"
sheet2.Range["B2"].NumberValue = 350
sheet2.Range["C2"].Text = "A区-01"
sheet2.Range["A3"].Text = "平板电脑"
sheet2.Range["B3"].NumberValue = 280
sheet2.Range["C3"].Text = "B区-03"
# 保存多工作表 Excel 文件
workbook.SaveToFile(inputFile, ExcelVersion.Version2013)
workbook.Dispose()
# 重新加载并转换为 HTML
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 将整个工作簿转换为 HTML(包含所有工作表)
workbook.SaveToHtml(outputFile)
workbook.Dispose()
print("整个工作簿已转换为 HTML:MultiSheetReport.html")
说明:
Worksheets.Add() 添加新的工作表到工作簿workbook.SaveToHtml() 将整个工作簿的所有工作表转换为 HTML工作簿预览:

应用场景:
对于需要进一步处理 HTML 内容的场景,可以使用流式输出方式,将转换结果保存到内存流或自定义流中:
from spire.xls import Workbook, HTMLOptions, Stream
inputFile = "SalesReport.xlsx"
outputFile = "SalesReport_Stream.html"
# 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(inputFile)
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 设置 HTML 选项
options = HTMLOptions()
options.ImageEmbedded = True
# 创建输出流并转换
fileStream = Stream(outputFile)
sheet.SaveToHtml(fileStream, options)
fileStream.Close()
workbook.Dispose()
print("已通过流式输出转换为 HTML:SalesReport_Stream.html")
说明:
Stream() 创建文件流对象,用于控制输出过程SaveToHtml(fileStream, options) 将工作表内容写入指定的流fileStream.Close() 关闭流,释放资源优势:
Workbook 是整个 Excel 操作的入口点,代表一个完整的 Excel 文件。
常用方法:
| 方法 | 说明 |
|---|---|
LoadFromFile(filePath) | 从指定路径加载 Excel 文件 |
SaveToFile(filePath, version) | 将工作簿保存为 Excel 文件 |
SaveToHtml(filePath) | 将整个工作簿转换为 HTML 文件 |
Dispose() | 释放工作簿占用的资源 |
属性:
| 属性 | 说明 |
|---|---|
Worksheets | 获取工作簿中的所有工作表集合 |
Worksheet 代表 Excel 中的单个工作表,是数据操作的主要对象。
常用方法:
| 方法 | 说明 |
|---|---|
SaveToHtml(filePath) | 将当前工作表转换为 HTML 文件 |
SaveToHtml(stream, options) | 将工作表转换为 HTML 并写入流 |
AutoFitColumns() | 自动调整所有列的宽度 |
属性:
| 属性 | 说明 |
|---|---|
Name | 获取或设置工作表名称 |
Range | 获取工作表的单元格范围对象 |
HTMLOptions 用于配置 HTML 转换的各种选项。
常用属性:
| 属性 | 说明 | 默认值 |
|---|---|---|
ImageEmbedded | 是否将图片嵌入 HTML(Base64 编码) | False |
使用建议:
ImageEmbedded = TrueStream 提供流式 I/O 操作,用于灵活控制文件输出。
常用方法:
| 方法 | 说明 |
|---|---|
Close() | 关闭流并释放资源 |
使用场景:
下面是一个完整的实际应用场景,演示如何自动生成销售报表并发布为 HTML:
from spire.xls import Workbook, ExcelVersion, HTMLOptions
from datetime import datetime
def generate_sales_report():
"""生成销售报表并转换为 HTML"""
# 创建工作报告
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = f"{datetime.now().strftime('%Y年%m月')}销售报表"
# 写入报表标题
sheet.Range["A1"].Text = "月度销售业绩报表"
sheet.Range["A1"].Style.Font.Size = 16
sheet.Range["A1"].Style.Font.IsBold = True
sheet.Range["A1"].Style.HorizontalAlignment = 1 # 居中对齐
# 合并单元格作为标题
sheet.Range["A1:F1"].Merge()
# 写入表头
headers = ["销售人员", "产品类别", "销售数量", "单价(元)", "销售额(元)", "完成率"]
for col, header in enumerate(headers, start=1):
cell = sheet.Range[3, col]
cell.Text = header
cell.Style.Font.IsBold = True
cell.Style.Color = Color.get_LightBlue()
# 模拟销售数据
sales_data = [
["张三", "笔记本电脑", 45, 5500, 247500, 0.92],
["张三", "平板电脑", 32, 3200, 102400, 0.88],
["李四", "笔记本电脑", 38, 5500, 209000, 0.85],
["李四", "平板电脑", 28, 3200, 89600, 0.80],
["王五", "笔记本电脑", 52, 5500, 286000, 0.95],
["王五", "平板电脑", 41, 3200, 131200, 0.91],
]
# 写入数据行
for row_idx, data in enumerate(sales_data, start=4):
for col_idx, value in enumerate(data, start=1):
cell = sheet.Range[row_idx, col_idx]
if isinstance(value, str):
cell.Value = value
elif isinstance(value, float):
cell.NumberValue = value
cell.Style.NumberFormat = "0%"
else:
cell.NumberValue = value
if col_idx >= 4: # 金额列
cell.Style.NumberFormat = "#,##0"
# 计算总计行
total_row = len(sales_data) + 4
sheet.Range[total_row, 1].Text = "合计"
sheet.Range[total_row, 1].Style.Font.IsBold = True
# 自动调整列宽
sheet.Range.AutoFitColumns()
# 保存 Excel 文件
excel_file = f"Sales_Report_{datetime.now().strftime('%Y%m%d')}.xlsx"
workbook.SaveToFile(excel_file, ExcelVersion.Version2013)
# 转换为 HTML
html_file = f"Sales_Report_{datetime.now().strftime('%Y%m%d')}.html"
options = HTMLOptions()
options.ImageEmbedded = True
sheet.SaveToHtml(html_file, options)
workbook.Dispose()
print(f"Excel 报表已生成:{excel_file}")
print(f"HTML 报表已生成:{html_file}")
return html_file
# 执行报表生成
generate_sales_report()
说明:
扩展方向:
通过本文示例,你已经了解如何使用 Python 将 Excel 文件转换为 HTML 格式。从单个工作表的简单转换,到整个工作簿的批量处理,再到流式输出的灵活应用,整个过程高度自动化,特别适用于企业报表发布、数据看板展示、在线文档共享等场景。
相比手动复制粘贴或在线转换工具,基于 Python 的代码方式具有以下优势:
你可以在此基础上扩展更多能力,例如:
如果你正在处理 Excel 数据的在线展示或自动化报表需求,这种基于 Python 的转换方案将为你的工作带来显著提升。
以上就是使用Python将Excel转换为HTML的代码详解的详细内容,更多关于Python将Excel转换为HTML的资料请关注本站其它相关文章!
您可能感兴趣的文章: