如何使用xlwt与xlrd实现每5行数据存入一个工作表?
如何修改Python代码实现每5行数据存入一个Excel工作表?
我来帮你搞定这个问题!你现在的代码只能把所有数据都写到Sheet1里,想要实现每5行数据存到一个独立的工作表(每个表都带表头对吧?),其实可以调整得更简洁高效,不用先创建Sheet1再复制修改,直接一次性生成所有需要的工作表就行。
先理清楚核心需求:把14行数据拆分到多个工作表,每个表最多存5行数据,且每个表都要有表头。下面是具体的修改方案:
修改思路
- 先把所有要写入的数据整理到一个列表,方便后续按批次拆分
- 计算需要的工作表数量:总数据14行,每5行一个表,所以需要3个工作表(5+5+4)
- 循环创建每个工作表,先写入表头,再写入对应批次的数据
- 最后统一保存整个工作簿,避免反复操作Excel文件带来的冗余和错误
修改后的完整代码
import xlwt import math myyear = '2018' myweek = '10' mycd='1001' fileName = myyear + myweek + '.xls' savePath = r'D:/' + fileName # 准备所有要写入的数据(和你原数据集一致) data_list = [[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14]] # 每个工作表最多存放5行数据 rows_per_sheet = 5 # 计算需要的工作表总数(向上取整,确保所有数据都能放下) sheet_count = math.ceil(len(data_list) / rows_per_sheet) # 创建新的工作簿 workbook = xlwt.Workbook(encoding='UTF-8') # 逐个创建工作表并写入数据 for sheet_idx in range(sheet_count): # 给工作表命名:Sheet1、Sheet2、Sheet3... sheet_name = f'Sheet{sheet_idx + 1}' worksheet = workbook.add_sheet(sheet_name) # 写入表头(每个工作表都保留相同表头) worksheet.write(0, 0, label='year') worksheet.write(0, 1, label='week') worksheet.write(0, 2, label='CD') worksheet.write(0, 3, label='keyword') worksheet.write(0, 4, label='importance') # 获取当前工作表要写入的数据片段(按每5行拆分) start_pos = sheet_idx * rows_per_sheet end_pos = start_pos + rows_per_sheet current_batch_data = data_list[start_pos:end_pos] # 写入当前批次的数据,从第2行开始(第1行是表头) for row_num, (cmp_noun, value) in enumerate(current_batch_data, start=1): worksheet.write(row_num, 0, label=myyear) worksheet.write(row_num, 1, label=myweek) worksheet.write(row_num, 2, label=mycd) worksheet.write(row_num, 3, label=cmp_noun) worksheet.write(row_num, 4, label=value) # 保存整个工作簿 workbook.save(savePath)
关键部分说明
- 工作表数量计算:用
math.ceil()向上取整,保证哪怕最后一个工作表不足5行数据,也能单独创建一个表来存放 - 数据拆分:用列表切片
data_list[start_pos:end_pos]快速获取每个工作表对应的数据批次,逻辑清晰易维护 - 表头写入:每个工作表都会单独写入表头,完全匹配你示例中的格式要求
- 高效操作文件:全程只创建一次工作簿,最后一次性保存,比你原来先创建再复制修改的方式更高效,也减少了文件读写错误的概率
运行这段代码后,你会得到3个工作表:Sheet1含表头+5行数据,Sheet2含表头+5行数据,Sheet3含表头+4行数据,完美实现你的需求!
内容的提问来源于stack exchange,提问作者user9270170
相关产品推荐
相关产品推荐

