Python 写入 Excel 的两种主流方案实际用法总结

日常做数据处理、生成运营报表的时候,用 Python 导出 Excel 是非常高频的需求。主流的实现方案基本就两个:pandas 和 openpyxl。

两者适用场景差得挺多,这里整理下实际开发中的用法和踩过的坑。

如果数据本身是规整的结构化数据,优先用 pandas。DataFrame 接口写起来很简洁,几行代码就能导出文件。

复制代码
import pandas as pd

# 创建示例数据
data = {
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 28],
    '城市': ['北京', '上海', '广州']
}

# 创建DataFrame
df = pd.DataFrame(data)

# 写入Excel文件(单工作表)
df.to_excel('output_pandas.xlsx', index=False, sheet_name='员工信息')

index=False 这个参数建议默认带上,不然导出的文件会多一列行号,大部分场景下都没用。我一开始写的时候经常忘,每次都要重新导一次。

需要往同一个 Excel 里写多个工作表的话,用 ExcelWriter 上下文管理器就可以,不用自己手动保存关闭。

复制代码
# 写入多工作表
with pd.ExcelWriter('output_pandas_multi.xlsx') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    df.head(2).to_excel(writer, sheet_name='Sheet2', index=False)

这种写法适合批量导出不同维度的数据,比如按部门分 sheet,逻辑写起来很清晰。

要是需求里带格式要求,比如表头要加粗改颜色、单元格要居中、固定列宽,甚至要合并单元格、加公式,pandas 就不够用了。

这种场景一般用 openpyxl,能做到单元格级别的控制。

复制代码
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment

# 创建工作簿和工作表
wb = Workbook()
ws = wb.active
ws.title = "员工数据"

# 设置表头样式
header_font = Font(bold=True, color="FF0000")
header_alignment = Alignment(horizontal="center")

# 写入表头
headers = ["姓名", "年龄", "城市"]
for col_num, header in enumerate(headers, 1):
    cell = ws.cell(row=1, column=col_num, value=header)
    cell.font = header_font
    cell.alignment = header_alignment

# 写入数据
data_rows = [
    ["张三", 25, "北京"],
    ["李四", 30, "上海"],
    ["王五", 28, "广州"]
]
for row_num, row_data in enumerate(data_rows, 2):
    for col_num, cell_value in enumerate(row_data, 1):
        ws.cell(row=row_num, column=col_num, value=cell_value)

# 设置列宽
ws.column_dimensions['A'].width = 15
ws.column_dimensions['B'].width = 10
ws.column_dimensions['C'].width = 15

# 保存文件
wb.save("output_openpyxl.xlsx")

openpyxl 的行和列都是从 1 开始计数的,刚接触的时候很容易和从 0 开始的列表下标搞混,写循环的时候多注意下。

列宽这些参数可以根据实际内容调整,要是嫌麻烦也可以写个自动计算列宽的函数,不过大部分场景下手动给个固定值也够用。

依赖安装直接用 pip 装就行,下面是常用的版本要求,太老的版本可能会有兼容性问题。

复制代码
pandas>=1.3.0
openpyxl>=3.0.0
xlsxwriter>=3.0.0

xlsxwriter 也可以用来写 Excel,不过平时用得少,这里就不展开了,有兴趣可以自己试试。

上面几段代码跑通之后,会生成对应的几个 xlsx 文件。单工作表导出的是 output_pandas.xlsx,多工作表的是 output_pandas_multi.xlsx,带格式的是 output_openpyxl.xlsx。实际用的时候替换成自己的数据源和输出路径就行。

选型的时候其实很简单,纯数据导出、想少写代码就选 pandas;有复杂格式要求、需要操作单个单元格就上 openpyxl。

域名验证总是失败,试试来此加密的DNS代理(CNAME解析)方案。无需频繁修改DNS记录,一次配置CNAME指向,即可实现后续所有证书申请的自动验证。这种方案极大地降低了误操作风险,同时也为那些无法提供API权限的域名提供了优雅的自动化路径。

大部分常规场景 pandas 都能覆盖,真碰到产品提格式需求了再切 openpyxl 也完全来得及。

聊点题外话,平时做后端服务或者内部系统的时候,经常要处理 SSL 证书的申请和续期。

之前都是手动走流程,到期了还容易忘,出过几次线上告警。后来用了 lcjmSSL,体验还不错。免费就能申请,支持多域名、泛域名和 IP 证书,全自动化申请、验证和部署,还有简洁的 API 接口,写个定时任务就能完全不用管了。底层基于 Let's Encrypt、Google Trust Services 这些支持 ACME 的可信机构,证书兼容性也没问题,省了不少琐事。

相关推荐
Zane199443 分钟前
归并排序和堆排序都能保证O(nlogn),为什么谁也没法把稳定和原地两个优点占全
算法·排序算法
邪修king1 小时前
Re:Linux 系统篇(三十一):库的制作与原理Chapter2:静态链接与程序加载 —— 从磁盘 ELF 到运行中进程的完整旅程
android·linux·运维·开发语言
天天喝旺仔1 小时前
Go 泛型实战:从类型参数、约束到可复用泛型容器与函数
数据结构·算法·容器·go
geovindu1 小时前
rust: Factory Method Pattern
开发语言·设计模式·rust·工厂方法模式·创建型模式
eybk1 小时前
用Kivy制作手机相片分类局域网传送工具,还能传输数据库文件
开发语言·python
可爱的小小小狼1 小时前
【无标题】
java·算法
企业数字化笔记1 小时前
固定资产还有借用记录能报废吗?Java前置检查、停止折旧与SQL验收
java·开发语言·sql
dtq04241 小时前
数据结构 - 栈
c语言·数据结构·学习
wuminyu1 小时前
纯轻量级锁体系下C2编译器锁粗化和消除机制剖析
java·linux·c语言·jvm·c++