Python新手求助:复制指定Excel工作表至新工作簿遇索引错误
解决Excel工作表复制时的"IndexError: At least one sheet must be visible"错误
错误原因
你用pd.read_excel传入sheet_name=['Roster','LOA']时,返回的是字典类型(键为工作表名,值为对应DataFrame),但直接调用df.to_excel是错误的——字典没有to_excel方法,这种错误调用方式导致了工作表可见性的异常提示(和原文件工作表是否隐藏无关)。
修正后的代码
遍历读取到的字典,逐个将每个工作表的DataFrame写入新工作簿:
import pandas as pd # 读取指定工作表,返回字典 sheet_dict = pd.read_excel('AMT.xlsb', sheet_name=['Roster','LOA']) # 写入新工作簿 with pd.ExcelWriter('output.xlsx') as writer: for sheet_name, df in sheet_dict.items(): df.to_excel(writer, sheet_name=sheet_name, index=False)
- 加上
index=False可以避免把DataFrame的索引列写入Excel(如果不需要的话)。 - 注意:读取
.xlsb格式文件需要额外依赖,确保已安装pyxlsb:pip install pyxlsb。
额外说明
如果原工作表包含格式、公式等非数据内容,pandas无法完全保留这些信息。如果需要完整复制工作表样式和公式,建议使用xlwings库来操作:
import xlwings as xw # 打开源工作簿和新建工作簿 with xw.App(visible=False) as app: src_book = xw.Book('AMT.xlsb') dest_book = xw.Book() # 复制指定工作表到新工作簿 for sheet_name in ['Roster', 'LOA']: src_book.sheets[sheet_name].copy(after=dest_book.sheets[-1]) # 删除新建工作簿默认的空白工作表 dest_book.sheets['Sheet1'].delete() # 保存新工作簿 dest_book.save('output.xlsx')
内容的提问来源于stack exchange,提问作者gd6noob
相关产品推荐
相关产品推荐

