我的知识记录

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,先关掉再跑。

Python写入Excel数据并保存:从零生成xlsx文件

标签:

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

上一篇:Python批量修改Word字体字号颜色教程

下一篇:Python把一个Excel拆成多个文件