Python列表数据导出为Excel的三种实现方案

 更新时间:2026年06月25日 09:14:38   作者:Jazz_z  
在日常数据处理工作中,将 Python 列表结构的数据导出为 Excel 文件是极为常见的需求,本文基于 Free Spire.XLS for Python 免费库,从一维列表、二维列表到字典列表三种典型场景,逐步讲解列表到 Excel 的转换实现,需要的朋友可以参考下

引言

在日常数据处理工作中,将 Python 列表结构的数据导出为 Excel 文件是极为常见的需求。无论是数据分析结果输出、业务报表生成,还是接口数据落地,Excel 凭借其良好的可读性和广泛的兼容性,始终是数据交付的主流格式。

本文基于 Free Spire.XLS for Python 免费库,从一维列表、二维列表到字典列表三种典型场景,逐步讲解列表到 Excel 的转换实现。

一、环境准备

Free Spire.XLS for Python 是一款独立的 Excel 处理组件,无需依赖 Microsoft Office 环境,支持 .xls 与 .xlsx 格式的创建与编辑。免费版对工作表数量和数据行数有一定限制,适用于中小规模数据导出场景。

安装方式

通过 pip 直接安装免费版本:

pip install Spire.Xls.Free

安装完成后,在代码中引入核心模块:

from spire.xls import *
from spire.xls.common import *

核心对象包括 Workbook(工作簿)、Worksheet(工作表)和 CellRange(单元格区域),三者构成了 Excel 操作的基础层级。

二、场景一:一维列表导出单列数据

一维列表是最简单的数据结构,通常对应 Excel 中的单列数据,例如产品名称列表、员工工号序列等。

实现思路

  1. 创建工作簿并获取工作表
  2. 遍历列表,按行索引依次写入单元格
  3. 调整列宽以优化显示效果
  4. 保存文件并释放资源

完整代码

from spire.xls import *
from spire.xls.common import *

def list_to_single_column(data_list, output_path, sheet_name="数据"):
    """将一维列表导出为Excel单列数据"""
    # 创建工作簿
    workbook = Workbook()
    # 清除默认工作表,新建指定名称的工作表
    workbook.Worksheets.Clear()
    sheet = workbook.Worksheets.Add(sheet_name)
    
    # 遍历列表写入单元格,从第1行第1列开始
    for index, value in enumerate(data_list):
        sheet.Range[index + 1, 1].Value = str(value)
    
    # 自动调整列宽
    sheet.AllocatedRange.AutoFitColumns()
    
    # 保存为xlsx格式
    workbook.SaveToFile(output_path, ExcelVersion.Version2016)
    workbook.Dispose()

# 调用示例
if __name__ == "__main__":
    products = ["笔记本电脑", "机械键盘", "无线鼠标", "27寸显示器", "外接硬盘"]
    list_to_single_column(products, "single_column.xlsx")

要点说明

  • 行号与列号均从 1 开始计数,这与 Excel 的原生索引方式一致
  • Value 属性会自动将输入转为字符串存储,若需保留数值类型可使用 NumberValue
  • AutoFitColumns() 方法根据内容自动调整列宽,避免内容被截断

三、场景二:二维列表导出结构化表格

二维列表(列表嵌套列表)是最接近 Excel 表格结构的数据形式,每一个子列表对应一行数据,通常配合表头使用。

实现思路

  1. 分离表头与数据行,分别写入
  2. 双层循环遍历二维列表,按行列坐标写入单元格
  3. 对表头区域应用基础样式,增强可读性
  4. 批量自适应列宽

完整代码

from spire.xls import *
from spire.xls.common import *

def list_2d_to_excel(headers, data_rows, output_path, sheet_name="数据表"):
    """将二维列表导出为带表头的Excel表格"""
    workbook = Workbook()
    workbook.Worksheets.Clear()
    sheet = workbook.Worksheets.Add(sheet_name)
    
    # 写入表头(第1行)
    for col_idx, header in enumerate(headers):
        cell = sheet.Range[1, col_idx + 1]
        cell.Value = header
        # 表头样式:加粗、背景色
        cell.Style.Font.IsBold = True
        cell.Style.Color = Color.get_LightBlue()
        cell.Style.HorizontalAlignment = HorizontalAlignType.Center
    
    # 写入数据行(从第2行开始)
    for row_idx, row_data in enumerate(data_rows):
        for col_idx, value in enumerate(row_data):
            # 根据数据类型选择写入方式
            cell = sheet.Range[row_idx + 2, col_idx + 1]
            if isinstance(value, (int, float)):
                cell.NumberValue = float(value)
            else:
                cell.Value = str(value)
    
    # 添加边框
    data_range = sheet.Range[1, 1, len(data_rows) + 1, len(headers)]
    data_range.BorderAround(LineStyleType.Thin)
    data_range.BorderInside(LineStyleType.Thin)
    
    # 自适应列宽
    sheet.AllocatedRange.AutoFitColumns()
    
    workbook.SaveToFile(output_path, ExcelVersion.Version2016)
    workbook.Dispose()

# 调用示例
if __name__ == "__main__":
    headers = ["员工ID", "姓名", "部门", "月薪", "在职状态"]
    employees = [
        [1001, "张明", "研发部", 15000, True],
        [1002, "李华", "产品部", 13500, True],
        [1003, "王芳", "设计部", 12800, False],
        [1004, "赵强", "测试部", 11500, True]
    ]
    list_2d_to_excel(headers, employees, "employee_table.xlsx")

技术细节

  • 数据类型区分:数值型数据使用 NumberValue 写入,可在 Excel 中参与公式计算;字符串使用 Value 属性
  • 区域批量操作:通过 sheet.Range[行1, 列1, 行2, 列2] 获取矩形区域,可一次性设置边框、对齐方式等样式
  • 布尔值处理:直接写入时会显示为 TRUE/FALSE,若需自定义显示文本需转换为字符串

四、场景三:字典列表导出为 Excel

字典列表是业务开发中最常见的数据结构,例如数据库查询结果、API 响应数据等,每条记录以键值对形式存在。

实现思路

  1. 从首条数据提取键名作为表头
  2. 遍历每条字典记录,按键的顺序写入对应列
  3. 支持空值容错处理
  4. 对数值、布尔等特殊字段做类型区分写入

完整代码

from spire.xls import *
from spire.xls.common import *

def dict_list_to_excel(dict_list, output_path, sheet_name="数据", custom_headers=None):
    """将字典列表导出为Excel表格"""
    if not dict_list:
        raise ValueError("数据列表不能为空")
    
    workbook = Workbook()
    workbook.Worksheets.Clear()
    sheet = workbook.Worksheets.Add(sheet_name)
    
    # 确定表头:优先使用自定义表头,否则使用字典键名
    if custom_headers:
        headers = custom_headers
        keys = list(dict_list[0].keys())
    else:
        keys = list(dict_list[0].keys())
        headers = keys
    
    # 写入表头
    for col_idx, header in enumerate(headers):
        cell = sheet.Range[1, col_idx + 1]
        cell.Value = header
        cell.Style.Font.IsBold = True
        cell.Style.HorizontalAlignment = HorizontalAlignType.Center
    
    # 写入数据
    for row_idx, item in enumerate(dict_list):
        for col_idx, key in enumerate(keys):
            cell = sheet.Range[row_idx + 2, col_idx + 1]
            value = item.get(key, "")
            
            # 根据类型智能写入
            if value is None:
                cell.Value = ""
            elif isinstance(value, bool):
                cell.BooleanValue = value
            elif isinstance(value, (int, float)):
                cell.NumberValue = float(value)
            else:
                cell.Value = str(value)
    
    # 格式优化
    data_range = sheet.Range[1, 1, len(dict_list) + 1, len(headers)]
    data_range.BorderAround(LineStyleType.Thin)
    data_range.BorderInside(LineStyleType.Thin)
    sheet.AllocatedRange.AutoFitColumns()
    
    workbook.SaveToFile(output_path, ExcelVersion.Version2016)
    workbook.Dispose()

# 调用示例
if __name__ == "__main__":
    orders = [
        {"order_id": "ORD2024001", "product": "笔记本支架", "quantity": 2, "price": 89.9, "status": "已发货"},
        {"order_id": "ORD2024002", "product": "USB集线器", "quantity": 5, "price": 45.0, "status": "待出库"},
        {"order_id": "ORD2024003", "product": "散热底座", "quantity": 1, "price": 129.0, "status": "已签收"},
    ]
    dict_list_to_excel(orders, "orders.xlsx", sheet_name="订单数据")

设计考量

  • 类型分发逻辑:通过 isinstance 判断数据类型,分别调用 BooleanValueNumberValueDateTimeValue 等属性,保证数据在 Excel 中以正确类型存储
  • 空值处理:字典中不存在的键或值为 None 时,写入空字符串,避免报错
  • 字符串兜底:所有未匹配到的类型统一转为字符串写入,确保导出不中断

五、总结

将 Python 列表导出为 Excel 的核心在于数据结构到表格结构的映射。一维列表对应单列、二维列表对应行列矩阵、字典列表对应键值结构化记录,三种场景覆盖了绝大多数业务需求。

在实际开发中,建议根据数据规模和格式要求选择合适的写入方式:简单场景直接遍历写入,复杂场景封装为通用函数并补充类型判断与异常处理,可有效提升代码复用性与健壮性。

常见问题

Q:免费版有什么使用限制?
A:免费版对每个工作簿的工作表数量和数据行数有上限,满足常规开发与小型项目使用,大规模生产场景可评估商业版本。

Q:能否追加写入已有 Excel 文件?
A:可以。使用 workbook.LoadFromFile(file_path) 加载现有文件,定位到目标工作表后继续写入,最后保存覆盖即可。

Q:如何设置数字格式如百分比、货币?
A:通过 sheet.Range[].NumberFormat 属性设置,例如 "0.00%" 表示百分比,"$#,##0.00" 表示美元货币格式。

以上就是Python列表数据导出为Excel的三种实现方案的详细内容,更多关于Python列表数据导出为Excel的资料请关注脚本之家其它相关文章!

相关文章

  • Python使用穷举法求两个数的最大公约数问题

    Python使用穷举法求两个数的最大公约数问题

    这篇文章主要介绍了Python使用穷举法求两个数的最大公约数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python实现简单网页图片抓取完整代码实例

    Python实现简单网页图片抓取完整代码实例

    这篇文章主要介绍了Python实现简单网页图片抓取完整代码实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • python set()去重的底层原理及实例

    python set()去重的底层原理及实例

    python中集合set是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素,还可以计算交集、差集、并集等,它与列表(list)的行为类似,这篇文章主要介绍了python set()去重的底层原理,需要的朋友可以参考下
    2022-01-01
  • Python+Selenium键盘鼠标模拟事件操作详解

    Python+Selenium键盘鼠标模拟事件操作详解

    这篇文章主要带大家一起学习一下Selenium的元素的基本操作与鼠标键盘模拟事件的操作,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-06-06
  • python单链表实现代码实例

    python单链表实现代码实例

    这篇文章主要介绍了python单链表实现代码,大家参考使用吧
    2013-11-11
  • 使用Python 操作 xmind 绘制思维导图的详细方法

    使用Python 操作 xmind 绘制思维导图的详细方法

    在平时的工作中当我们要总结一些知识的时候就需要一款工具来画画流程图,这里推荐 XMind 软件,用 Xmind 绘制的思维导图看起来思路清晰,那么今天的文章介绍关于思维导图的相关知识以及用 Python 如何操作 Xmind 绘制思维导图
    2021-10-10
  • python实现简单的购物程序代码实例

    python实现简单的购物程序代码实例

    这篇文章主要介绍了python实现简单的购物程序代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python实现sublime3的less编译插件示例

    python实现sublime3的less编译插件示例

    这篇文章主要介绍了python实现sublime3的less编译插件示例的相关资料
    2014-04-04
  • 浅谈python中np.array的shape( ,)与( ,1)的区别

    浅谈python中np.array的shape( ,)与( ,1)的区别

    今天小编就为大家分享一篇python中np.array的shape ( ,)与( ,1)的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python之MSE、MAE、RMSE的使用

    python之MSE、MAE、RMSE的使用

    今天小编就为大家分享一篇python之MSE、MAE、RMSE的使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论