python

关注公众号 jb51net

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

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

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

要点说明

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

技术细节

场景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="订单数据")

设计考量

知识扩展

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

准备工作:安装必要的库

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

安装命令:

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的资料请关注脚本之家其它相关文章!

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