如何解决xlwings结合Pandas读取Excel时仅加载3000行的问题?
解决xlwings读取xlsb文件仅加载部分行的问题
你遇到的问题大概率是expand='table'参数的限制导致的——这个参数依赖Excel的正式表格对象(List Object),如果你的数据不是以表格形式存在,或者数据区域中有空行、格式中断,就会导致xlwings识别的范围小于实际数据行数。以下是几种可行的解决方法:
方法1:手动指定完整数据范围
通过获取数据区域的最后一行和最后一列,构造精确的读取范围,避免依赖自动扩展:
wb = xw.Book("Sheet.xlsb", read_only=True, update_links=False) sheet = wb.sheets["Sheet1"] # 获取A列最后有数据的行号(从底部向上找第一个非空行) last_row = sheet.range(f'A{sheet.cells.last_cell.row}').end('up').row # 获取第3行最后有数据的列标(从右向左找第一个非空列) last_col = sheet.range(3, sheet.cells.last_cell.column).end('left').column last_col_letter = sheet.range(1, last_col).address.split('$')[1] # 构造完整数据范围并读取 data_range = f'A3:{last_col_letter}{last_row}' df = sheet.range(data_range).options(pd.DataFrame, header=1, index=False).value wb.close()
方法2:分步扩展数据范围
放弃expand='table',改用分步向下、向右扩展,确保覆盖所有连续数据:
wb = xw.Book("Sheet.xlsb", read_only=True, update_links=False) sheet = wb.sheets["Sheet1"] # 先从A3向下扩展获取所有行,再向右扩展获取所有列 data_range = sheet.range('A3').expand('down').expand('right') df = data_range.options(pd.DataFrame, header=1, index=False).value wb.close()
方法3:检查Excel文件本身
如果以上方法仍无效,需要确认源文件是否存在以下情况:
- 数据区域存在隐藏行或过滤行:取消隐藏/清除过滤后再读取
- 中间存在大量连续空行:
expand会在遇到空行时停止扩展,需要清理数据中的无效空行
内容的提问来源于stack exchange,提问作者EnergyJ
相关产品推荐
相关产品推荐

