使用xlwt/xlrd生成xls文件超出最大行数限制该如何解决
根因说明
你遇到的报错是*.xls格式(Excel 97-2003版本标准)的原生硬限制,单个工作表最多仅支持65536行、256列,没有任何工具可以突破该格式本身的存储上限。
可落地解决方案(均满足保留.xls格式的要求)
- 方案1:拆分数据到同一文件的多个工作表
单工作表存满65535行(若需预留表头行可自行调整上限)后,自动创建新工作表继续存储,xlwt本身支持单个.xls文件创建多个工作表,只要单表不超上限就不会触发报错,参考实现代码如下:
import xlwt # 单sheet最大存储行数,有表头时预留1行设为65535,无表头可设为65536 MAX_ROW_PER_SHEET = 65535 wb = xlwt.Workbook(encoding='utf-8') sheet_idx = 0 current_sheet = wb.add_sheet(f'sheet_{sheet_idx}') current_row = 0 # 你的数据源可自行替换为迭代器、数据库查询结果等 data_source = [你的数据] # 如需表头可在初始化sheet后先写入表头,current_row同步+1 # header = ['列1', '列2', '列3'] # for col, val in enumerate(header): # current_sheet.write(0, col, val) # current_row = 1 for row_data in data_source: if current_row >= MAX_ROW_PER_SHEET: # 满行后新建工作表 sheet_idx += 1 current_sheet = wb.add_sheet(f'sheet_{sheet_idx}') current_row = 0 # 新建sheet后需要重复写表头的话,在这里重新执行表头写入逻辑,current_row同步+1 # 写入当前行数据 for col, val in enumerate(row_data): current_sheet.write(current_row, col, val) current_row += 1 wb.save('目标文件.xls')
- 方案2:拆分数据到多个独立的.xls文件
如果业务规则要求单个.xls文件只能有一个工作表,可每存满65536行就生成一个新的.xls文件,按序号命名即可,拆分逻辑和上述多sheet逻辑类似,仅需把新建sheet的操作替换为新建workbook并保存上一个workbook即可。 - 方案3:更换更高效的.xls生成库
如果对写入速度有要求,可替换xlwt为pyexcelerate库,该库同样支持生成标准.xls格式文件,写入效率比xlwt高3~10倍,同样遵循.xls单表行数限制,配合上述拆分逻辑即可正常使用。
内容的提问来源于stack exchange,提问作者Juan Andrade
相关产品推荐
相关产品推荐

