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
相关产品推荐
相关产品推荐

