文章目录
- 确保系统已安装 Python。通过 pip 安装 Free Spire.XLS for Python: pip install spire.xls.free
- 以下代码演示了创建新工作簿、写入单元格内容、应用格式并保存文件的完整流程: from spire.xls import * workbook = Workbook() sheet = workbook.Worksheets.get_Item(0) # 写入文本 sheet.Range[“B2”].Value = “Hello, Python & Excel!” # 应用格式 sheet.Range.AutoFitColumns() sheet.Range.BorderAround(LineStyleType.Medium, Color.get_MediumBlue()) sheet.Range.Style.Color = Color.get_LightGray() # 保存并释放资源 workbook.SaveToFile(“HelloWorld.xlsx”, ExcelVersion.Version2016) workbook.Dispose() 写入结果预览: 关键对象说明: Workbook:表示一个 Excel 文件,可通过 Workbook() 创建工作簿,新建的 Excel 工作簿包含三个默认工作表。 Worksheet:通过 Worksheets[index] 访问具体工作表。 Range[cell_ref]:通过 A1 引用或行列索引访问单元格。 .Value、.NumberValue、.DateTimeValue、.BooleanValue:分别用于写入不同类型的数据。 .SaveToFile():持久化工作簿至指定路径。 .Dispose():显式释放底层资源,避免内存泄漏。
- 字符串、整数和浮点数可直接赋值。对于数值类型,建议使用 NumberValue 属性以确保正确识别为数字格式: sheet.Range[“A1”].Value = “产品名称” sheet.Range[“B1”].Value = “销售额” sheet.Range[“A2”].Value = “笔记本电脑” sheet.Range[“B2”].NumberValue = 12000 sheet.Range[“A3”].Value = “智能手机” sheet.Range[“B3”].NumberValue = 8500.75 写入结果预览:
- Spire.XLS 支持通过 DateTimeValue 写入日期时间。需注意其内部使用 spire.xls.common.DateTime 类型,而非 Python 原生 datetime: from spire.xls.common import * import datetime # 写入当前 UTC 时间 sheet.Range[“B1”].DateTimeValue = DateTime.get_UtcNow() # 写入指定日期 sheet.Range[“B2”].DateTimeValue = DateTime.Parse(“2023-05-01”) # 转换 Python datetime 对象 py_time = datetime.datetime(2023, 5, 1, 10, 30) time_str = py_time.strftime(“%Y-%m-%d %H:%M:%S”) sheet.Range[“B3”].DateTimeValue = DateTime.Parse(time_str) # 设置显示格式 sheet.Range[“B1”].Style.NumberFormat = “yyyy-mm-dd hh:mm:ss” sheet.Range.AutoFitColumns() 写入结果预览:
- 布尔数据通过 BooleanValue 属性写入: sheet.Range[“B1”].BooleanValue = True sheet.Range[“B2”].BooleanValue = False 写入结果预览:
- 批量写入可通过 InsertArray 方法实现。该方法支持按行或按列插入一维数组: header = [“ID”, “姓名”, “年龄”] data = [[1, “张三”, 30], [2, “李四”, 25]] # 写入标题(按行) sheet.InsertArray(header, 1, 1, False) # 逐行写入数据 for i, row in enumerate(data, start=2): for j, value in enumerate(row, start=1): sheet.Range[i, j].Value = str(value) 写入结果预览: 注意:InsertArray 的第四个参数 is_row 控制插入方向;False 表示按列插入(即横向填充)。该方法仅支持同质的一维数组(如全为字符串或数字)。当列表包含多种类型(如整数、字符串、浮点数混合)时,需通过循环逐项写入,并根据目标单元格的数据语义选择适当的赋值方式(例如使用 .Value = str(x) 统一转为字符串,或分别使用 .NumberValue、.DateTimeValue 等属性以保留类型信息)。
- 将字典列表转换为表格时,通常以键作为列头: products = [ {“ID”: “P001”, “名称”: “键盘”, “价格”: 199}, {“ID”: “P002”, “名称”: “鼠标”, “价格”: 99} ] if products: headers = list(products[0].keys()) sheet.InsertArray(headers, 1, 1, False) for r_idx, item in enumerate(products, start=2): values = [item[k] for k in headers] # 当前版本需逐单元格赋值 for c_idx, val in enumerate(values, start=1): sheet.Range[r_idx, c_idx].Value = str(val) 写入结果预览:
- Excel 公式可通过 Formula 属性直接写入,计算由 Excel 客户端完成: sheet.Range[“A1”].NumberValue = 10 sheet.Range[“A2”].NumberValue = 20 sheet.Range[“B1”].Formula = “=SUM(A1:A2)” sheet.Range[“B2”].Formula = “=AVERAGE(A1:A2)”
- 使用 Pictures.Add(row, col, image_path) 在指定位置插入图像: sheet.Pictures.Add(3, 1, “logo.png”) # 可选:调整尺寸与偏移 # pic = sheet.Pictures.Add(3, 1, “logo.png”) # pic.Width, pic.Height = 100, 50
- 支持外部 URL 与内部工作表跳转: # 外部链接 cell = sheet.Range[7, 1] cell.Text = “Python 官网” link = sheet.HyperLinks.Add(cell) link.Address = “https://www.python.org” # 内部链接 detail_sheet = workbook.Worksheets.Add(“详情页”) target_cell = detail_sheet.Range[“A3”] target_cell.Text = “跳转至详情页” internal_link = sheet.HyperLinks.Add(sheet.Range[8, 1]) internal_link.Address = f”{detail_sheet.Name}!A1″
目录
- 环境配置与基础用法
- 安装依赖
- 基本写入示例
- 多类型数据写入实践
- 文本与数值
- 日期与时间
- 布尔值
- 列表与元组
- 字典列表
- 高级功能
- 公式写入
- 图片插入
- 超链接创建
- 写入结果预览
- 最佳实践
- 结语
在数据驱动的工作流中,Microsoft Excel 作为广泛使用的电子表格工具,常用于数据存储、分析与报告生成。然而,手动维护和更新 Excel 文件不仅效率低下,还容易引入人为错误。在需要处理大规模数据、生成周期性报表或集成异构系统输出的场景下,自动化方案显得尤为必要。
Python 凭借其丰富的生态系统,在办公自动化领域展现出显著优势。本文将介绍如何使用 Free Spire.XLS for Python 库,以程序化方式高效、可靠地将多种数据类型写入 Excel 文件,并涵盖格式设置、公式嵌入、图片插入及超链接创建等高级功能。
确保系统已安装 Python。通过 pip 安装 Free Spire.XLS for Python:
pip install spire.xls.free
以下代码演示了创建新工作簿、写入单元格内容、应用格式并保存文件的完整流程:
from spire.xls import *
workbook = Workbook()
sheet = workbook.Worksheets.get_Item(0)
# 写入文本
sheet.Range["B2"].Value = "Hello, Python & Excel!"
# 应用格式
sheet.Range.AutoFitColumns()
sheet.Range.BorderAround(LineStyleType.Medium, Color.get_MediumBlue())
sheet.Range.Style.Color = Color.get_LightGray()
# 保存并释放资源
workbook.SaveToFile("HelloWorld.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
写入结果预览:

关键对象说明:
Workbook:表示一个 Excel 文件,可通过Workbook()创建工作簿,新建的 Excel 工作簿包含三个默认工作表。Worksheet:通过Worksheets[index]访问具体工作表。Range[cell_ref]:通过 A1 引用或行列索引访问单元格。.Value、.NumberValue、.DateTimeValue、.BooleanValue:分别用于写入不同类型的数据。.SaveToFile():持久化工作簿至指定路径。.Dispose():显式释放底层资源,避免内存泄漏。
字符串、整数和浮点数可直接赋值。对于数值类型,建议使用 NumberValue 属性以确保正确识别为数字格式:
sheet.Range["A1"].Value = "产品名称" sheet.Range["B1"].Value = "销售额" sheet.Range["A2"].Value = "笔记本电脑" sheet.Range["B2"].NumberValue = 12000 sheet.Range["A3"].Value = "智能手机" sheet.Range["B3"].NumberValue = 8500.75
写入结果预览:

Spire.XLS 支持通过 DateTimeValue 写入日期时间。需注意其内部使用 spire.xls.common.DateTime 类型,而非 Python 原生 datetime:
from spire.xls.common import *
import datetime
# 写入当前 UTC 时间
sheet.Range["B1"].DateTimeValue = DateTime.get_UtcNow()
# 写入指定日期
sheet.Range["B2"].DateTimeValue = DateTime.Parse("2023-05-01")
# 转换 Python datetime 对象
py_time = datetime.datetime(2023, 5, 1, 10, 30)
time_str = py_time.strftime("%Y-%m-%d %H:%M:%S")
sheet.Range["B3"].DateTimeValue = DateTime.Parse(time_str)
# 设置显示格式
sheet.Range["B1"].Style.NumberFormat = "yyyy-mm-dd hh:mm:ss"
sheet.Range.AutoFitColumns()
写入结果预览:

布尔数据通过 BooleanValue 属性写入:
sheet.Range["B1"].BooleanValue = True sheet.Range["B2"].BooleanValue = False
写入结果预览:

批量写入可通过 InsertArray 方法实现。该方法支持按行或按列插入一维数组:
header = ["ID", "姓名", "年龄"]
data = [[1, "张三", 30], [2, "李四", 25]]
# 写入标题(按行)
sheet.InsertArray(header, 1, 1, False)
# 逐行写入数据
for i, row in enumerate(data, start=2):
for j, value in enumerate(row, start=1):
sheet.Range[i, j].Value = str(value)
写入结果预览:

注意:InsertArray 的第四个参数 is_row 控制插入方向;False 表示按列插入(即横向填充)。该方法仅支持同质的一维数组(如全为字符串或数字)。当列表包含多种类型(如整数、字符串、浮点数混合)时,需通过循环逐项写入,并根据目标单元格的数据语义选择适当的赋值方式(例如使用 .Value = str(x) 统一转为字符串,或分别使用 .NumberValue、.DateTimeValue 等属性以保留类型信息)。
将字典列表转换为表格时,通常以键作为列头:
products = [
{"ID": "P001", "名称": "键盘", "价格": 199},
{"ID": "P002", "名称": "鼠标", "价格": 99}
]
if products:
headers = list(products[0].keys())
sheet.InsertArray(headers, 1, 1, False)
for r_idx, item in enumerate(products, start=2):
values = [item[k] for k in headers]
# 当前版本需逐单元格赋值
for c_idx, val in enumerate(values, start=1):
sheet.Range[r_idx, c_idx].Value = str(val)
写入结果预览:

Excel 公式可通过 Formula 属性直接写入,计算由 Excel 客户端完成:
sheet.Range["A1"].NumberValue = 10 sheet.Range["A2"].NumberValue = 20 sheet.Range["B1"].Formula = "=SUM(A1:A2)" sheet.Range["B2"].Formula = "=AVERAGE(A1:A2)"
使用 Pictures.Add(row, col, image_path) 在指定位置插入图像:
sheet.Pictures.Add(3, 1, "logo.png") # 可选:调整尺寸与偏移 # pic = sheet.Pictures.Add(3, 1, "logo.png") # pic.Width, pic.Height = 100, 50
支持外部 URL 与内部工作表跳转:
# 外部链接
cell = sheet.Range[7, 1]
cell.Text = "Python 官网"
link = sheet.HyperLinks.Add(cell)
link.Address = "https://www.python.org"
# 内部链接
detail_sheet = workbook.Worksheets.Add("详情页")
target_cell = detail_sheet.Range["A3"]
target_cell.Text = "跳转至详情页"
internal_link = sheet.HyperLinks.Add(sheet.Range[8, 1])
internal_link.Address = f"{detail_sheet.Name}!A1"

- 资源管理:每次操作后调用
workbook.Dispose() 释放非托管资源。
- 异常处理:在生产环境中应使用
try...except 捕获文件 I/O 或权限错误。
- 性能考量:对大规模数据,优先使用
InsertArray 或区域批量赋值,避免逐单元格写入。
- 路径安全:确保输出目录存在且具有写权限,图片路径应为绝对路径或相对于执行环境的有效路径。
workbook.Dispose() 释放非托管资源。try...except 捕获文件 I/O 或权限错误。InsertArray 或区域批量赋值,避免逐单元格写入。
Free Spire.XLS for Python 提供了一套完整的 API,支持从基础数据写入到复杂格式控制的各类 Excel 操作。通过程序化方式处理 Excel 文件,可显著提升数据处理效率,降低人工干预风险,适用于报表自动化、数据导出、系统集成等典型业务场景。合理结合其功能与工程实践规范,可构建稳定、可维护的办公自动化解决方案。
到此这篇关于使用Python实现写入多类型数据至Excel文件的文章就介绍到这了,更多相关Python Excel数据写入内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python实现读取文件夹里Excel文件里的数据
- 使用Python对Excel数据读取与保存的全面指南
- Python自动化操作Excel生成专业数据透视表的实战指南
- Python批量清洗Excel数据的操作指南(去重+补缺失值+可视化)
- Python实现Excel与TXT文本文件数据转换的完整指南
- 使用Python自动化处理Excel的脏数据
- Python轻松实现查找高亮Excel指定数据