使用Python将Excel转换为HTML的代码详解
引言
在企业数据管理与信息分享场景中,Excel 文件虽然功能强大,但在跨平台浏览、在线展示和快速分享方面存在局限性。许多用户需要将 Excel 表格发布到网页上,供团队成员在线查看,或将其嵌入到内部系统中进行数据展示。然而,手动将 Excel 转换为 HTML 不仅操作繁琐,还难以保持原有的格式、样式和图片。特别是在处理大量报表或需要自动化生成网页报告时,编程方式成为最高效的解决方案。
本文将介绍如何使用 Python 将 Excel 工作表或整个工作簿转换为 HTML 格式,保留原始数据的结构、样式和图表。整个过程可以实现完全自动化,适用于财务报表在线发布、业务数据看板、项目进度跟踪页面等场景。
本文使用的方法需要用到 Free Spire.XLS for Python,可通过 pip 安装:
pip install spire.xls.free
1. 环境准备与基础转换
首先创建一个包含示例数据的 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 转换提供源文件。
2. 将单个工作表转换为 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选项 - 转换后的 HTML 文件可以直接在浏览器中打开查看
- 该方法仅转换当前指定的工作表,不包含其他工作表内容
3. 将整个工作簿转换为 HTML
当 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 文件会包含导航链接,方便在不同工作表之间切换
工作簿预览:

应用场景:
- 月度综合报表,包含销售、库存、财务等多个维度
- 项目管理文档,包含任务列表、进度跟踪、资源分配等工作表
- 学生成绩管理系统,包含各班成绩、统计分析等工作表
4. 使用流式输出转换 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()关闭流,释放资源
优势:
- 可以在写入前对 HTML 内容进行额外处理
- 支持自定义输出路径和文件名
- 便于集成到更大的数据处理流程中
5. 关键类与方法解析
Workbook 类
Workbook 是整个 Excel 操作的入口点,代表一个完整的 Excel 文件。
常用方法:
| 方法 | 说明 |
|---|---|
LoadFromFile(filePath) | 从指定路径加载 Excel 文件 |
SaveToFile(filePath, version) | 将工作簿保存为 Excel 文件 |
SaveToHtml(filePath) | 将整个工作簿转换为 HTML 文件 |
Dispose() | 释放工作簿占用的资源 |
属性:
| 属性 | 说明 |
|---|---|
Worksheets | 获取工作簿中的所有工作表集合 |
Worksheet 类
Worksheet 代表 Excel 中的单个工作表,是数据操作的主要对象。
常用方法:
| 方法 | 说明 |
|---|---|
SaveToHtml(filePath) | 将当前工作表转换为 HTML 文件 |
SaveToHtml(stream, options) | 将工作表转换为 HTML 并写入流 |
AutoFitColumns() | 自动调整所有列的宽度 |
属性:
| 属性 | 说明 |
|---|---|
Name | 获取或设置工作表名称 |
Range | 获取工作表的单元格范围对象 |
HTMLOptions 类
HTMLOptions 用于配置 HTML 转换的各种选项。
常用属性:
| 属性 | 说明 | 默认值 |
|---|---|---|
ImageEmbedded | 是否将图片嵌入 HTML(Base64 编码) | False |
使用建议:
- 如果工作表包含图片或图表,务必设置
ImageEmbedded = True - 嵌入图片会增加 HTML 文件大小,但避免了外部文件依赖
- 适合需要单独分发 HTML 文件的场景
Stream 类
Stream 提供流式 I/O 操作,用于灵活控制文件输出。
常用方法:
| 方法 | 说明 |
|---|---|
Close() | 关闭流并释放资源 |
使用场景:
- 需要在写入前处理数据
- 需要将输出重定向到自定义目标
- 集成到异步或批量处理流程中
6. 实际应用示例:自动化报表发布
下面是一个完整的实际应用场景,演示如何自动生成销售报表并发布为 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()说明:
- 使用动态文件名,包含日期信息,便于版本管理
- 添加了格式化标题和表头,提升报表专业性
- 设置了不同的数字格式,使金额和百分比更易读
- 自动计算并添加合计行
- 同时生成 Excel 和 HTML 两种格式,满足不同需求
扩展方向:
- 可以添加邮件发送功能,自动将 HTML 报表发送给相关人员
- 可以集成到 Web 服务器,提供在线报表查看服务
- 可以定时执行,实现日报、周报、月报的自动化生成
总结
通过本文示例,你已经了解如何使用 Python 将 Excel 文件转换为 HTML 格式。从单个工作表的简单转换,到整个工作簿的批量处理,再到流式输出的灵活应用,整个过程高度自动化,特别适用于企业报表发布、数据看板展示、在线文档共享等场景。
相比手动复制粘贴或在线转换工具,基于 Python 的代码方式具有以下优势:
- 格式保留完整:自动保持原有的字体、颜色、边框等样式
- 批量处理高效:可以一次性处理多个文件,大幅提升工作效率
- 可定制性强:可以根据需求调整转换选项和输出格式
- 易于集成:可以轻松嵌入到自动化工作流或 Web 应用中
你可以在此基础上扩展更多能力,例如:
- 结合定时任务,实现日报、周报的自动生成与发布
- 集成到企业内部系统,提供实时数据查看功能
- 添加样式定制,使生成的 HTML 更符合企业视觉规范
- 结合数据库,实现从数据提取到 HTML 发布的端到端自动化
如果你正在处理 Excel 数据的在线展示或自动化报表需求,这种基于 Python 的转换方案将为你的工作带来显著提升。
以上就是使用Python将Excel转换为HTML的代码详解的详细内容,更多关于Python将Excel转换为HTML的资料请关注脚本之家其它相关文章!
相关文章
python torch.utils.data.DataLoader使用方法
这篇文章主要介绍了python torch.utils.data.DataLoader使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-04-04


最新评论