使用openpyxl加载现有工作簿显示为空的问题求助
问题分析与解决方案
问题根源
你的existing_book.xlsx里的所有工作表都被设置为隐藏状态,而openpyxl的load_workbook()默认行为是忽略隐藏的工作表——这就导致加载后没有任何可见工作表,进而出现sheetnames为空列表、active返回None,保存时因为缺少可见工作表触发IndexError: At least one sheet must be visible报错。
为什么新建工作簿没问题?
你新建的工作簿里的工作表默认都是可见状态(sheet_state='visible'),所以openpyxl能正常识别并加载,自然可以正常输出工作表列表、访问活动工作表。
解决方案
方案1:加载时保留所有工作表(含隐藏表)
修改加载代码,添加keep_vba=True参数——这个参数会让openpyxl保留工作簿中的所有元素,包括隐藏工作表:
from openpyxl import load_workbook existing_book = load_workbook('existing_book.xlsx', keep_vba=True) print(existing_book.sheetnames) # 现在能输出所有工作表名称了 # 如果你需要保存工作簿,记得至少把一个工作表设为可见 existing_book.worksheets[0].sheet_state = 'visible' existing_book.save('fixed_existing_book.xlsx')
方案2:只读模式加载(仅用于查看)
如果只是需要查看工作表内容,不需要修改,可以用只读模式加载,这种模式会加载所有工作表(不管是否隐藏):
from openpyxl import load_workbook existing_book = load_workbook('existing_book.xlsx', read_only=True) print(existing_book.sheetnames) # 正常输出所有工作表列表
注意:只读模式下无法修改或保存工作簿,适合仅读取数据的场景。
内容的提问来源于stack exchange,提问作者Gabriel Gagnon
相关产品推荐
相关产品推荐

