如何修正Pandas中‘Book’对象无‘worksheets’属性的错误?
解决Excel工作表信息获取的属性错误问题
你的代码报错是因为xls.book对应的对象类型没有worksheets属性——pandas的ExcelFile会根据文件格式和指定引擎调用不同的库(xlrd或openpyxl),不同库的Book对象结构不一样。下面是两种适配不同文件格式的修正方案:
方案1:处理xls格式文件(用xlrd引擎)
xlrd库的Book对象获取工作表要用sheets()方法,而非worksheets,同时状态获取方式也不同:
xls = pd.ExcelFile(excel_path, engine='xlrd') sheets = xls.book.sheets() sheet_states = [] for idx, sheet in enumerate(sheets): # xlrd中visibility值:0=可见,1=隐藏,2=非常隐藏 sheet_states.append([idx, sheet.name, sheet.visibility]) sheet_states_df = pd.DataFrame(sheet_states, columns=["序号", "title", "state"])
方案2:处理xlsx/xlsm格式文件(用openpyxl引擎)
openpyxl库的Workbook对象支持worksheets属性,状态直接取sheet_state:
xls = pd.ExcelFile(excel_path, engine='openpyxl') sheets = xls.book.worksheets sheet_states = [] for idx, sheet in enumerate(sheets): # openpyxl中sheet_state值:'visible'/'hidden'/'veryHidden' sheet_states.append([idx, sheet.title, sheet.sheet_state]) sheet_states_df = pd.DataFrame(sheet_states, columns=["序号", "title", "state"])
注意事项
- 新版xlrd不再支持xlsx文件,处理xlsx必须指定openpyxl引擎
- 提前安装依赖库:
pip install xlrd openpyxl
内容的提问来源于stack exchange,提问作者yasharov
相关产品推荐
相关产品推荐

