You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:45:39