使用Python将Excel转换为HTML的代码详解

 更新时间:2026年06月05日 08:59:35   作者:大丸子  
在企业数据管理与信息分享场景中,Excel文件虽然功能强大,但在跨平台浏览、在线展示和快速分享方面存在局限性,然而,手动将Excel转换为 HTML 不仅操作繁琐,还难以保持原有的格式,所以本文将介绍如何使用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的资料请关注脚本之家其它相关文章!

相关文章

  • 在Pandas中给多层索引降级的方法

    在Pandas中给多层索引降级的方法

    今天小编就为大家分享一篇在Pandas中给多层索引降级的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python正则表达式学习小例子

    Python正则表达式学习小例子

    这篇文章主要介绍了Python正则表达式学习小例子,学习python的朋友可以参考一下
    2020-03-03
  • python torch.utils.data.DataLoader使用方法

    python torch.utils.data.DataLoader使用方法

    这篇文章主要介绍了python torch.utils.data.DataLoader使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Django 事务回滚的具体实现

    Django 事务回滚的具体实现

    本文主要介绍了Django 事务回滚的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Pycharm导入anaconda环境的教程图解

    Pycharm导入anaconda环境的教程图解

    这篇文章主要介绍了Pycharm导入anaconda环境的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python函数式编程的用法详解

    Python函数式编程的用法详解

    Python函数式编程是一种编程范式,它强调使用纯函数来处理数据,在函数式编程中,函数被视为一等公民,可以像值一样传递和存储,本教程将介绍如何使用Python进行函数式编程,并提供一些示例,需要的朋友可以参考下
    2023-06-06
  • Python网络编程之ftplib模块

    Python网络编程之ftplib模块

    这篇文章介绍了Python网络编程之ftplib模块,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Python实现字符串格式化的方法小结

    Python实现字符串格式化的方法小结

    本篇文章主要介绍了Python实现字符串格式化的方法小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • python3通过udp实现组播数据的发送和接收操作

    python3通过udp实现组播数据的发送和接收操作

    这篇文章主要介绍了python3通过udp实现组播数据的发送和接收操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 给Python学习者的文件读写指南(含基础与进阶)

    给Python学习者的文件读写指南(含基础与进阶)

    今天,猫猫跟大家一起,好好学习Python文件读写的内容,这部分内容特别常用,掌握后对工作和实战都大有益处,学习是循序渐进的过程,欲速则不达
    2020-01-01

最新评论