Python将列表导出Excel的完整教程

 更新时间:2026年06月25日 11:35:50   作者:LAYONTHEGROUND  
本文基于 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 操作的基础层级。

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

一维列表是最简单的数据结构,通常对应 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() 方法根据内容自动调整列宽,避免内容被截断

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

二维列表(列表嵌套列表)是最接近 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,若需自定义显示文本需转换为字符串

场景3:字典列表导出为 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 文件是数据处理中的常见需求,无论是数据报告、日志导出还是数据分析结果存储。本文将系统地讲解如何用 Python 将列表导出到 Excel,涵盖基础写法到进阶格式化技巧,并提供可直接运行的代码示例。

准备工作:安装必要的库

Python 本身没有内置 Excel 写入功能,需要借助第三方库。最常用的有:

  • pandas:数据分析标配,导出 Excel 最简洁,推荐初学者优先使用。
  • openpyxl:专门读写 .xlsx 格式,支持细粒度控制。
  • xlsxwriter:功能强大,支持图表、公式、条件格式,适合复杂报表。

安装命令:

pip install pandas openpyxl xlsxwriter

说明:pandas 默认使用 openpyxl 作为 Excel 写入引擎,因此安装后即可使用。

方法一:使用 pandas(最简单、最推荐)

如果你的列表是二维结构(比如每行是一条记录),pandas 可以一行代码完成导出。

基础用法:一维列表导出为单列

import pandas as pd
# 一维列表
data = ["苹果", "香蕉", "橙子", "葡萄"]
# 转换为 DataFrame,并指定列名
df = pd.DataFrame(data, columns=["水果名称"])
# 导出为 Excel,不包含索引
df.to_excel("fruits.xlsx", index=False)

二维列表(多行多列)导出为表格

# 二维列表:每行是一个子列表,代表一条记录
data = [
    ["张三", 25, "北京"],
    ["李四", 30, "上海"],
    ["王五", 28, "广州"]
]
# 指定列名
columns = ["姓名", "年龄", "城市"]
df = pd.DataFrame(data, columns=columns)
df.to_excel("people.xlsx", index=False)

多个列表合并成多列

如果数据是多个独立的一维列表,但希望它们作为不同列,可以将它们组装成字典再创建 DataFrame:

names = ["张三", "李四", "王五"]
ages = [25, 30, 28]
cities = ["北京", "上海", "广州"]
df = pd.DataFrame({
    "姓名": names,
    "年龄": ages,
    "城市": cities
})
df.to_excel("people2.xlsx", index=False)

导出多个 sheet

使用 ExcelWriter 可以将多个 DataFrame 写入同一工作簿的不同 sheet:

with pd.ExcelWriter("multi_sheet.xlsx") as writer:
    df1.to_excel(writer, sheet_name="员工信息", index=False)
    df2.to_excel(writer, sheet_name="部门统计", index=False)

方法二:使用 openpyxl(更细粒度的控制)

当需要精确控制单元格样式、合并单元格或写入大量数据时,openpyxl 更为合适。

将二维列表逐行写入

from openpyxl import Workbook
data = [
    ["姓名", "年龄", "城市"],
    ["张三", 25, "北京"],
    ["李四", 30, "上海"],
    ["王五", 28, "广州"]
]
wb = Workbook()
ws = wb.active
# 逐行写入
for row in data:
    ws.append(row)
wb.save("openpyxl_output.xlsx")

写入一维列表(单列)

只需将每个元素作为单元素列表追加:

fruits = ["苹果", "香蕉", "橙子"]
ws = wb.active
for fruit in fruits:
    ws.append([fruit])   # 注意 append 需要可迭代对象

指定写入位置(单元格坐标)

# 在 A1 写入标题
ws['A1'] = "水果列表"
# 或者使用行列索引(从1开始)
ws.cell(row=1, column=2, value="价格")

方法三:使用 xlsxwriter(丰富格式、图表支持)

xlsxwriter 对样式、图表、条件格式的支持更全面,适合生成专业的 Excel 报表。

基本写入

import xlsxwriter
workbook = xlsxwriter.Workbook('xlsxwriter_output.xlsx')
worksheet = workbook.add_worksheet()
data = [
    ["姓名", "年龄", "城市"],
    ["张三", 25, "北京"],
    ["李四", 30, "上海"],
]
for row_idx, row_data in enumerate(data):
    for col_idx, value in enumerate(row_data):
        worksheet.write(row_idx, col_idx, value)
workbook.close()

添加格式(字体、颜色、边框)

# 定义格式
header_format = workbook.add_format({
    'bold': True,
    'font_color': 'white',
    'bg_color': '#4CAF50',
    'border': 1
})
# 写入表头时应用格式
for col, header in enumerate(["姓名", "年龄", "城市"]):
    worksheet.write(0, col, header, header_format)

写入多个工作表

worksheet1 = workbook.add_worksheet("Sheet1")
worksheet2 = workbook.add_worksheet("Sheet2")

总结

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

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

以上就是Python将列表导出Excel的完整教程的详细内容,更多关于Python列表导出Excel的资料请关注脚本之家其它相关文章!

相关文章

  • python实现扫雷游戏的示例

    python实现扫雷游戏的示例

    这篇文章主要介绍了python实现扫雷游戏的示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-10-10
  • Python字符串中出现的次数统计多种方法

    Python字符串中出现的次数统计多种方法

    这篇文章主要介绍了Python字符串中出现的次数统计多种方法,使用内置的count()方法、正则表达式、列表推导式、循环和条件判断以及字符串分割,每种方法都有其适用的场景和优缺点,选择合适的方法取决于具体的需求和场景,需要的朋友可以参考下
    2024-12-12
  • 从正则到 BERT详解Python如何判断文本是否为标题

    从正则到 BERT详解Python如何判断文本是否为标题

    在做文档解析(PDF/Word)或者清洗用户生成内容(UGC)时,我们经常面临一个尴尬的问题,怎么知道哪句是标题,哪句是正文,本文将从规则匹配到深度学习,层层递进,带你搞定这个问题
    2026-04-04
  • Python识别html主要文本框过程解析

    Python识别html主要文本框过程解析

    这篇文章主要介绍了python识别html主要文本框过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python利用redis-py实现哈希数据类型的常用指令操作

    Python利用redis-py实现哈希数据类型的常用指令操作

    这篇文章我们继续学习 “redis-py” 模块的一些关于 “哈希数据类型” 的相关指令用方法,比如利用 pyton 实现操作 “哈希表” 的数据、操作 “redis” 的事务等等
    2022-09-09
  • 详解Python中的Lock和Rlock

    详解Python中的Lock和Rlock

    这篇文章主要介绍了Python中的Lock和Rlock的相关资料,帮助大家更好的理解和学习python线程的相关知识,感兴趣的朋友可以了解下
    2021-01-01
  • Python如何判断Excel单元格的值是否为空

    Python如何判断Excel单元格的值是否为空

    在Python中,你可以使用openpyxl库来处理Excel文件,这篇文章主要介绍了Python判断Excel单元格的值是否为空,需要的朋友可以参考下
    2024-06-06
  • python实现将视频按帧读取到自定义目录

    python实现将视频按帧读取到自定义目录

    今天小编就为大家分享一篇python实现将视频按帧读取到自定义目录,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python中time库使用详解

    python中time库使用详解

    time库是python中处理时间的标准库,下面这篇文章主要给大家介绍了关于python中time库使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 详解使用Selenium爬取豆瓣电影前100的爱情片相关信息

    详解使用Selenium爬取豆瓣电影前100的爱情片相关信息

    这篇文章主要介绍了详解使用Selenium爬取豆瓣电影前100的爱情片相关信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论