Python 列表到 Excel:清理数据导出与格式化
Source: Dev.to
将 Python 列表写入 Excel

在当今数据驱动的世界中,Python 已成为数据处理和自动化的首选语言。实际应用中一个非常常见的需求是将处理后的数据——尤其是以 Python 列表形式组织的数据——导出为 Excel 文件,以便共享、可视化、报告或进一步分析。
虽然 Python 提供了多种将数据写入 Excel 的方式,但许多开发者在寻找既 高效又灵活 的解决方案时会遇到困难,尤其是在涉及格式化、样式以及处理大数据集时。选择合适的库可以显著提升开发速度和输出质量。
本文将介绍如何使用 Spire.XLS for Python 将 Python 列表数据写入 Excel 文件。除了基本的数据导出功能外,它还支持高级格式化、精确的布局控制以及可扩展的数据处理——非常适合自动化工作流和报表生成。
环境设置
Spire.XLS for Python 是一个专业的 Excel 库,旨在以编程方式创建、读取、编辑、转换和打印 Excel 文件。其关键优势之一是 无需安装 Microsoft Excel 或 Office,这使其特别适合服务器端和云环境。
该库支持广泛的 Excel 格式,包括 .xls、.xlsx、.xlsm 和 .xlt。它还提供了丰富的 API,用于处理工作簿、工作表、单元格、样式、图表、公式、批注等。
在将列表数据写入 Excel 时,Spire.XLS for Python 允许您:
- 精确控制数据写入位置
- 应用单元格级别的格式和样式
- 自动处理不同的数据类型
- 生成结构良好且视觉上精致的 Excel 文件
安装
在开始之前,请确保已在您的环境中安装 Spire.XLS for Python。您可以使用 pip 轻松安装:
pip install Spire.XLS
安装完成后,您即可在 Python 项目中直接导入并使用它。
将 Python 列表写入 Excel:基础示例
场景
假设我们有一个列表,其中每个内部列表代表一行数据:
data = [
["Department", "Budget (USD)", "Actual Spend (USD)", "Difference"],
["Marketing", 80000, 76500, -3500],
["Engineering", 150000, 162300, 12300],
["Administration", 50000, 48200, -1800]
]
代码示例
from spire.xls import *
from spire.xls.common import *
def write_simple_list_to_excel(data_list, file_path="simple_data.xlsx"):
"""
将简单的 Python 列表写入 Excel 文件。
:param data_list: 包含数据的列表,每个子列表代表一行。
:param file_path: 输出的 Excel 文件路径。
"""
# 创建一个新的工作簿
workbook = Workbook()
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 遍历列表并将数据写入单元格
for row_idx, row_data in enumerate(data_list):
for col_idx, cell_value in enumerate(row_data):
# 为对应的单元格赋值(Spire.XLS 使用基于 1 的索引)
sheet.Range[row_idx + 1, col_idx + 1].Value = str(cell_value)
# 自动调整列宽
sheet.Range.AutoFitColumns()
# 将工作簿保存为 Excel 文件
workbook.SaveToFile(file_path, FileFormat.Version2016)
workbook.Dispose()
print(f"Data successfully written to: {file_path}")
# 调用函数
write_simple_list_to_excel(data)
输出预览

关键点说明
Workbook()创建一个新的 Excel 工作簿。workbook.Worksheets[0]获取默认工作表。Range[row, column]使用基于 1 的索引定位单元格。Value为单元格赋值;字符串和数字会自动处理。SaveToFile()将工作簿保存为.xlsx格式。Dispose()释放资源,防止内存泄漏。
重要提示: Spire.XLS 中的行列索引从 1 开始,而不是 0,因此需要使用
row_idx + 1和col_idx + 1。
高级用法:格式化和复杂数据类型
场景
- 第一行应视为带有格式的标题。
- 数据包含日期和时间戳,必须正确显示。
代码示例(部分)
from spire.xls import *
import datetime
def write_advance():
# ... (implementation continues)
(高级示例的其余部分请参见原文。)
将列表数据写入 Excel(含标题和格式化)
def write_advanced_list_to_excel(data_list, file_path="advanced_data.xlsx"):
"""
Write list data with headers and formatting to Excel.
:param data_list: List containing data, first row as headers.
:param file_path: Output Excel file path.
"""
workbook = Workbook()
sheet = workbook.Worksheets[0]
# Write header row with styles
header_data = data_list[0]
for col_idx, header_text in enumerate(header_data):
header_cell = sheet.Range[1, col_idx + 1]
header_cell.Value = header_text
header_cell.Style.Font.IsBold = True
header_cell.Style.KnownColor = ExcelColors.LightYellow
header_cell.Style.HorizontalAlignment = HorizontalAlignType.Center
# Write data rows
for row_idx, row_data in enumerate(data_list[1:]):
for col_idx, cell_value in enumerate(row_data):
cell = sheet.Range[row_idx + 2, col_idx + 1]
if isinstance(cell_value, datetime.datetime):
cell.DateTimeValue = DateTime.Parse(str(cell_value))
cell.Style.NumberFormat = "yyyy-mm-dd hh:mm"
elif isinstance(cell_value, datetime.date):
cell.DateTimeValue = DateTime.Parse(str(cell_value))
cell.Style.NumberFormat = "yyyy-mm-dd"
else:
cell.Value = str(cell_value)
# Auto‑fit columns
for i in range(1, 5):
sheet.AutoFitColumn(i)
workbook.SaveToFile(file_path, FileFormat.Version2016)
workbook.Dispose()
print(f"Formatted Excel file created: {file_path}")
包含日期的示例数据
advanced_data = [
["Order ID", "Customer", "Amount (USD)", "Order Date"],
["SO-20231026001", "Shenzhen Zhilian Tech", 32800, datetime.date(2023, 10, 26)],
["SO-20231025002", "Beijing Ruida Info", 15600,
datetime.datetime(2023, 10, 25, 14, 30)],
["SO-20231027003", "Shanghai Qiming Systems", 48900,
datetime.date(2023, 10, 27)],
["SO-20231028004", "Hangzhou CloudData", 21450,
datetime.datetime(2023, 10, 28, 9, 15)]
]
write_advanced_list_to_excel(advanced_data)
输出预览
显著特性
- 单元格样式 通过
cell.Style(字体、颜色、对齐) - 日期处理 使用
DateTimeValue和NumberFormat - 自动列宽调整 使用
AutoFitColumn()
错误处理与性能优化
常见问题与解决方案
| 问题 | 解决方案 |
|---|---|
| 无效的文件路径或权限 | 确保输出目录存在且具有写入权限。 |
| 数据类型不正确 | 使用专用属性,如 DateTimeValue 处理日期相关数据。 |
| 大数据集和内存使用 | 考虑批量写入或在导出前预处理数据。 |
推荐模式
try:
workbook = Workbook()
# Excel operations
workbook.SaveToFile(file_path, FileFormat.Version2016)
except Exception as e:
print(f"Error writing Excel file: {e}")
finally:
if 'workbook' in locals():
workbook.Dispose()
性能提示
- 仅保存工作簿一次,在写入所有数据之后。
- 在可能的情况下,将样式应用于 范围 而不是单个单元格。
- 在将数据传递给 Excel 库之前 预处理数据。
- 始终调用
Dispose()以释放资源。
结论
本文演示了如何使用 Spire.XLS for Python 将 Python 列表数据导出到 Excel,从基础的数据写入开始,扩展到高级格式化和稳健的错误处理。无论是生成报告、导出分析结果,还是构建自动化工作流,这种方法都提供了灵活性和可靠性。
通过探索图表、公式和数据验证等附加功能,您可以进一步将 Spire.XLS for Python 集成到数据处理管道中,释放更大的自动化潜力。

