python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python将Excel转换为HTML

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

作者:大丸子

在企业数据管理与信息分享场景中,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")

说明:

此步骤创建了包含销售数据的 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")

说明:

工作表预览:

注意事项:

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")

说明:

工作簿预览:

应用场景:

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")

说明:

优势:

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

使用建议:

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()

说明:

扩展方向:

总结

通过本文示例,你已经了解如何使用 Python 将 Excel 文件转换为 HTML 格式。从单个工作表的简单转换,到整个工作簿的批量处理,再到流式输出的灵活应用,整个过程高度自动化,特别适用于企业报表发布、数据看板展示、在线文档共享等场景。

相比手动复制粘贴或在线转换工具,基于 Python 的代码方式具有以下优势:

你可以在此基础上扩展更多能力,例如:

如果你正在处理 Excel 数据的在线展示或自动化报表需求,这种基于 Python 的转换方案将为你的工作带来显著提升。

以上就是使用Python将Excel转换为HTML的代码详解的详细内容,更多关于Python将Excel转换为HTML的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文