python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python列表数据导出为Excel

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

作者: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")

要点说明

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

二维列表(列表嵌套列表)是最接近 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")

技术细节

四、场景三:字典列表导出为 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="订单数据")

设计考量

五、总结

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

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

常见问题

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

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

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

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

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