You need to enable JavaScript to run this app. Python3.9.2环境下使用openpyxl写入数据生成的Excel文件打开为空
优惠活动
大模型
产品
解决方案
定价
更多

Python3.9.2环境下使用openpyxl写入数据生成的Excel文件打开为空

问题核心原因

1. create_sheet 参数传参错误

openpyxl 的 Workbook.create_sheet() 方法入参顺序为 (新工作表名称, 插入位置索引),第一个参数是工作表的名称,第二个才是指定的插入位置索引。
你代码里写的 wb.create_sheet(0) 实际是创建了一个名称为"0"的工作表,按默认规则插入到文档末尾,并没有将新工作表放到索引0的位置。
新建Workbook实例时,程序会自动生成一个名为"Sheet"的默认工作表,位于索引0的位置。你所有的写入操作都作用在文档末尾那个名叫"0"的工作表上,打开Excel时默认激活显示最开头的无内容默认Sheet,自然会判定文件内容为空——实际上写入的数据存在最后一个你未切换查看的工作表里。

2. 方案2存在方法调用错误

只有Workbook实例具备save()方法,Worksheet实例没有这个方法。你代码里写的 ws.save('sample.xlsx') 正常运行会抛出AttributeError,能成功生成文件大概率是贴代码时的笔误,保存操作必须通过wb实例完成。

修正后的可运行代码

两种写入逻辑(append逐行写入、按单元格坐标赋值写入)本身没有问题,只需要保证写入的是打开文件时默认显示的目标工作表即可:

import openpyxl

rows = [
    ('MMXMSN', '234234234324', 1), 
    ('NNMSMM', '123213344323', 1.2)
]

wb = openpyxl.Workbook()
# 直接获取默认激活的第一个工作表,也就是打开文件时默认显示的sheet
ws = wb.active

# 逐行append写入
for row in rows:
    ws.append(row)

# 坐标赋值写入的写法同样可用
# for i, row in enumerate(rows, 1):
#     for j, value in enumerate(row, 1):
#         ws.cell(row=i, column=j).value = value

# 必须通过wb实例执行保存操作
wb.save('sample.xlsx')
wb.close()

如果确实需要自定义插入位置新建工作表,要按照正确的参数顺序传值:

# 参数顺序:(工作表名称, 插入索引位置)
ws = wb.create_sheet(title="数据存储页", index=0)

补充验证:你之前生成的sample.xlsx并非完全无内容,点开Excel底部的工作表标签栏,切换到最后那个名叫"0"的工作表,就能看到之前写入的全部数据。


内容的提问来源于stack exchange,提问作者Andrei Enache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 15:15:03