Python案例如何导出Excel数据?从入门到实战的完整指南
目录导读
为什么用Python导出Excel数据?
在日常数据处理与自动化办公中,Python导出Excel数据是高频需求,无论是数据清洗后的结果、爬虫采集的数据,还是数据库查询记录,借助Python的pandas和openpyxl库,你可以在几行代码内生成标准.xlsx文件。

核心优势:
- 自动化:定时导出任务无需人工操作
- 灵活性:支持合并单元格、条件格式、图表等高级功能
- 兼容性:生成的Excel文件可在Office、WPS、Google Sheets中打开
核心库与安装指南
必备库
| 库名称 | 作用 | 安装命令 |
|---|---|---|
| pandas | 数据处理与便捷导出 | pip install pandas |
| openpyxl | 底层Excel读写引擎 | pip install openpyxl |
验证安装
import pandas as pd
import openpyxl
print("环境准备完成")
从列表导出简单Excel表格
场景
你有一份学生成绩数据,需要导出为Excel。
代码实现
import pandas as pd
# 准备数据
data = {
'姓名': ['张三', '李四', '王五'],
'数学': [90, 85, 78],
'语文': [88, 92, 81]
}
df = pd.DataFrame(data)
# 导出Excel
df.to_excel('成绩表.xlsx', index=False)
print("导出成功:成绩表.xlsx")
关键参数说明
index=False:不写入行索引号- 默认Sheet名为“Sheet1”,可通过
sheet_name='成绩'修改
从数据库查询结果导出Excel
场景
从MySQL数据库查询订单数据并导出。
完整代码
import pandas as pd
from sqlalchemy import create_engine
# 数据库连接(请替换为你的实际配置)
engine = create_engine('mysql+pymysql://root:password@localhost:3306/shop')
# SQL查询
sql = "SELECT order_id, amount, status FROM orders WHERE status='已完成'"
# 读取数据+导出
df = pd.read_sql(sql, engine)
df.to_excel('已完成订单.xlsx', index=False)
print(f"成功导出 {len(df)} 条订单记录")
注意:若使用SQLite,连接字符串改为sqlite:///mydb.db即可。
格式化与多Sheet导出
场景
需要生成一份含三个Sheet的报表,并对标题行加粗、列宽自适应。
代码实现
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font
from openpyxl.utils.dataframe import dataframe_to_rows
# 三个数据表
df1 = pd.DataFrame({'产品': ['A', 'B'], '销量': [100, 200]})
df2 = pd.DataFrame({'产品': ['C', 'D'], '销量': [150, 250]})
df3 = pd.DataFrame({'产品': ['E', 'F'], '销量': [300, 350]})
wb = Workbook()
# 逐个添加Sheet
for i, (df, sheet_name) in enumerate(zip(
[df1, df2, df3], ['一季度', '二季度', '三季度']
)):
if i == 0:
ws = wb.active
ws.title = sheet_name
else:
ws = wb.create_sheet(title=sheet_name)
# 写入数据
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
# 格式化标题行
for cell in ws[1]:
cell.font = Font(bold=True, color='0000FF')
# 调整列宽(简单自适应)
for col in ws.columns:
max_length = max(len(str(cell.value)) for cell in col if cell.value)
ws.column_dimensions[col[0].column_letter].width = max_length + 2
wb.save('季度报表.xlsx')
print("多Sheet格式化报表已生成")
常见错误问答
问:导出后Excel文件打开显示乱码?
答:通常是因为openpyxl引擎默认处理UTF-8,若数据含中文,确保代码文件第一行添加# -*- coding: utf-8 -*-,并设置encoding='utf-8-sig'(如果使用CSV)。“Python导出Excel数据”天然支持中文,无需额外编码。
问:如何将多个DataFrame写入同一个Sheet的不同位置?
答:使用openpyxl的load_workbook与append配合。
from openpyxl import load_workbook
wb = load_workbook('模板.xlsx')
ws = wb.active
for row in df.values.tolist():
ws.append(row)
wb.save('结果.xlsx')
问:导出到Excel后数字被存储为文本?
答:检查pandas的dtype,可以在读取时用pd.read_excel的dtype参数,或写入时用.astype(float)转换,使用openpyxl直接写入数字类型可避免此类问题。
问:可以导出为CSV而不是Excel吗?
答:可以,使用df.to_csv('data.csv', encoding='utf-8-sig', index=False),CSV文件兼容性更广,但丢失格式与多Sheet能力,如果你的需求是“Python导出Excel数据”,建议坚持使用.xlsx格式。
总结与进阶建议
本文通过三个具体案例,展示了从基础列表到数据库查询、再到高级格式化导出的完整路径,核心流程始终是:准备数据 → 构建DataFrame → to_excel()方法。
进阶学习方向
- Excel图表插入:使用
openpyxl.chart模块 - 数据透视表导出:用
pandas的pivot_table()后转Excel - 定时自动化:结合
schedule库实现每日自动导出 - 云存储集成:导出后自动上传至阿里云OSS或Google Drive
掌握“Python导出Excel数据”的能力,能让你的数据处理工作流效率提升80%以上,现在打开你的Python环境,动手试试吧!