在数据处理场景中,将 Python 列表导出为 Excel 文件是高频需求,常用于生成报表或批量导出数据。虽然 openpyxl 等库很常用,但 Spire.XLS 提供了更完整的编辑和格式支持,且无需依赖本地安装的 Excel,适合快速实现列表到 Excel 的转换。
下面我们通过三个典型场景来演示具体实现:一维列表单列导出、二维列表带表头导出以及字典列表按字段映射导出。
1. 环境准备
Spire.XLS for Python 支持 Python 3.6 及以上版本,通过 pip 安装即可:
pip install Spire.XLS.Free
2. 基础实战:导出一维列表(单列)
实现思路
- 创建空白工作簿并获取默认工作表;
- 遍历列表,将元素写入指定列(如 A 列);
- 保存文件并释放资源。
代码示例
from spire.xls import *
from spire.xls.common import *
# 定义要转换的一维列表
one_dimensional_list = ["Python", "Java", "C++", "JavaScript", "Go"]
# 1. 创建工作簿对象
workbook = Workbook()
# 2. 获取第一个工作表(索引从 0 开始)
worksheet = workbook.Worksheets[0]
# 3. 设置工作表名称
worksheet.Name = "编程语言列表"
# 4. 遍历列表,写入 Excel(行号从 1 开始)
for index, value in enumerate(one_dimensional_list):
row = index + 1
# 写入 A 列(第 1 列)
worksheet.Range[row, 1].Text = value
# 5. 保存 Excel 文件(支持 .xlsx/.xls/.xlsm 等格式)
output_path = "一维列表转 Excel.xlsx"
workbook.SaveToFile(output_path, FileFormat.Version2016)
# 6. 释放资源(重要,避免内存泄漏)
workbook.Dispose()
print(f"一维列表已成功导出到:{output_path}")
关键点说明
Workbook():相当于新建一个 Excel 文件;Range[row, col]:定位单元格,注意行/列号均从 1 开始;Dispose():务必调用以释放工作簿资源,否则可能导致文件被占用无法删除。
3. 进阶实战:导出二维列表(带表头)
实现思路
- 定义包含表头和数据的二维列表;
- 先写入表头行,再逐行写入数据;
- 可选:设置表头样式(加粗、居中)提升可读性。
代码示例
from spire.xls import *
from spire.xls.common import *
# 定义二维列表(表头 + 数据)
two_dimensional_list = [
["姓名", "年龄", "城市", "职业"],
["张三", 28, "北京", "工程师"],
["李四", 32, "上海", "产品经理"],
["王五", 25, "广州", "设计师"],
["赵六", 30, "深圳", "开发工程师"]
]
# 1. 创建工作簿和工作表
workbook = Workbook()
worksheet = workbook.Worksheets[0]
worksheet.Name = "人员信息表"
# 2. 遍历二维列表,逐行写入
for row_index, row_data in enumerate(two_dimensional_list):
current_row = row_index + 1
for col_index, cell_value in enumerate(row_data):
current_col = col_index + 1
# 写入单元格内容,统一转为字符串
worksheet.Range[current_row, current_col].Text = str(cell_value)
# 3. 优化表头样式(加粗、居中)
if current_row == 1:
worksheet.Range[current_row, current_col].Style.Font.IsBold = True
worksheet.Range[current_row, current_col].Style.HorizontalAlignment = HorizontalAlignType.Center
# 4. 自动调整列宽(适配内容长度)
worksheet.AllocatedRange.AutoFitColumns()
# 5. 保存文件
output_path = "二维列表转 Excel.xlsx"
workbook.SaveToFile(output_path, FileFormat.Version2016)
workbook.Dispose()
print(f"二维列表已成功导出到:{output_path}")
关键点说明
- 嵌套循环:外层控制行,内层控制列;
- 样式设置:通过
IsBold和HorizontalAlignment美化表头; - AutoFitColumns:自动调整列宽,防止内容被截断。
4. 实战拓展:导出字典列表(贴合业务场景)
字典列表是业务开发中最常用的数据格式(如数据库查询结果),每个字典代表一行,键对应表头,值对应单元格数据。
实现思路
- 提取字典的键作为 Excel 表头;
- 先写入表头并设置样式;
- 遍历字典列表,按表头顺序提取值写入单元格;
- 处理键缺失情况,避免报错。
代码示例
from spire.xls import *
from spire.xls.common import *
# 定义字典列表(模拟业务场景)
dict_list = [
{"用户 ID": 1001, "姓名": "张三", "年龄": 28, "城市": "北京", "注册时间": "2024-01-15"},
{"用户 ID": 1002, "姓名": "李四", "年龄": 32, "城市": "上海", "注册时间": "2024-02-20"},
{"用户 ID": 1003, "姓名": "王五", "年龄": 25, "城市": "广州", "注册时间": "2024-03-10"},
{"用户 ID": 1004, "姓名": "赵六", "年龄": 30, "城市": "深圳", "注册时间": "2024-04-05"}
]
# 1. 创建工作簿和工作表
workbook = Workbook()
worksheet = workbook.Worksheets[0]
worksheet.Name = "用户信息表(字典列表)"
# 2. 提取表头(字典的键)
if not dict_list:
print("字典列表为空,无需导出!")
workbook.Dispose()
exit()
headers = list(dict_list[0].keys())
# 3. 写入表头行并设置样式
for col_index, header in enumerate(headers):
current_col = col_index + 1
worksheet.Range[1, current_col].Text = header
worksheet.Range[1, current_col].Style.Font.IsBold = True
worksheet.Range[1, current_col].Style.HorizontalAlignment = HorizontalAlignType.Center
# 4. 遍历字典列表,写入数据行
for row_idx, data_dict in enumerate(dict_list):
current_row = row_idx + 2 # 表头占第 1 行,数据从第 2 行开始
for col_idx, header in enumerate(headers):
current_col = col_idx + 1
# 用 get 方法兼容键缺失场景,避免 KeyError
cell_value = data_dict.get(header, "")
worksheet.Range[current_row, current_col].Text = str(cell_value)
# 5. 自动调整列宽
worksheet.AllocatedRange.AutoFitColumns()
# 6. 保存并释放资源
output_path = "字典列表转 Excel.xlsx"
workbook.SaveToFile(output_path, FileFormat.Version2016)
workbook.Dispose()
print(f"字典列表已成功导出到:{output_path}")
关键点说明
- 表头提取:优先使用第一个字典的键作为表头结构;
- 容错处理:使用
data_dict.get(header, "")替代直接取值,防止因键缺失导致程序崩溃; - 行号计算:数据行起始位置需根据表头行数动态调整。
5. 常见问题与注意事项
- 免费版限制:Free 版本读写 .xls 格式时有限制(每文档 5 个工作表,每表 200 行),建议优先使用 .xlsx 格式;
- 中文乱码:确保代码文件编码为 UTF-8,写入时直接使用字符串通常无需额外转码;
- 文件格式:
FileFormat.Version2016对应 .xlsx,FileFormat.Excel97to2003对应 .xls; - 字典键不一致:若字典键不完全一致,可收集所有唯一键作为表头,配合
get方法取值。
通过以上方案,你可以灵活应对从简单列表到复杂业务数据的 Excel 导出需求。遇到合并单元格或公式插入等高级操作时,可参考官方文档进一步拓展。


