Python写入Excel数据并保存:从零生成xlsx文件
用openpyxl新建工作簿、写入表头和多行数据、按行列写值、保存为xlsx,附完整可运行代码,适合批量导出报表。
场景痛点
数据查出来了,要交给不写代码的同事看,总得导成 Excel。手贴容易错位、合并单元格麻烦。用 openpyxl 在 Python 里直接把列表、字典写成一张表,保存成 .xlsx,对方双击就能打开。还能循环几百条数据一次性写进去,不会像手动那样复制到一半卡死。
用到的库
pip install openpyxl
完整代码
from openpyxl import Workbook
def export_sales(file_path: str) -> None:
# 1) 新建一个工作簿,默认自带一张 Sheet
wb = Workbook()
ws = wb.active
ws.title = "销售明细" # 把默认 Sheet 改个名
# 2) 写表头:按坐标赋值
headers = ["日期", "区域", "商品", "数量", "金额"]
ws.append(headers)
# 3) 用 append 一行一行写数据,append 自动往下追加
data = [
("2026-09-01", "华东", "键盘", 20, 1200.0),
("2026-09-01", "华南", "鼠标", 35, 1750.0),
("2026-09-02", "华东", "显示器", 8, 6400.0),
("2026-09-03", "华北", "键盘", 12, 720.0),
]
for row in data:
ws.append(row)
# 4) 也可以按坐标直接写某个单元格
ws["F1"] = "备注"
ws["F2"] = "首批"
# 5) 再加一张工作表,写汇总
ws2 = wb.create_sheet("汇总")
ws2.append(["区域", "总金额"])
ws2.append(["华东", 8320.0])
ws2.append(["华南", 1750.0])
ws2.append(["华北", 720.0])
# 6) 保存,覆盖同名文件
wb.save(file_path)
print(f"已保存: {file_path}")
if __name__ == "__main__":
export_sales(r"D:\reports\销售明细.xlsx")
代码讲解
Workbook()新建一个空工作簿,wb.active拿到默认那张 Sheet,ws.title = "销售明细"改表名。ws.append(iterable)是最顺手的写法:传一个列表或元组,它会自动写到下一行的 A、B、C……列,不用自己算行号。- 表头和数据都走
append,保持顺序一致,列就不会错。 ws["F1"] = "备注"演示按坐标直接写,适合只改个别格子的场景。wb.create_sheet("汇总")新增第二张工作表,多张表就这么加。wb.save(file_path)落盘;保存前文件一直只在内存里,不调用 save 就什么都没有。
运行结果
运行后在 D:\reports\ 下生成 销售明细.xlsx,里面有两张表:「销售明细」含表头和 4 行数据,「汇总」含 3 行汇总。双击打开即可看到。
注意事项
wb.save会覆盖同名文件,且没有提示,正式跑之前先确认路径没指错。- openpyxl 只能写
.xlsx,写不了.xls;要.xls老格式请改用xlwt(已不维护)或直接让对方收.xlsx。 - 写入日期请传
datetime.date对象,Excel 才能识别成日期;传字符串则只是文本。 - 单元格里写
=开头的内容会被当成公式,不希望被解析时注意转义。 - 文件如果正在被 Excel 打开,保存会报 PermissionError,先关掉再跑。

更新时间:2026-09-15 09:01:34