在循环内插入新行时如何遍历电子表格的所有行
电子表格遍历过程中动态插入行的问题与解决方案
问题描述
我想询问当我们在遍历循环内部新增行时,要如何遍历电子表格中的所有行。
举个例子,我的电子表格里有100行数据,我通过如下代码遍历这些行:
for row in self.worksheet.iter_rows(min_row=2, max_col=self.worksheet.max_column, max_row=self.worksheet.max_row): for cell in row: ...
在内层循环中,我会在满足特定条件时插入新行。
这就导致如果我在遍历过程中插入了10条新行,表格总共有110行,但循环只会遍历最初的100行,新增的行不会被纳入遍历范围。
我希望这些新增的行也能被纳入遍历流程,应该怎么实现?
已验证解决方案
我的需求是向排序后的数据插入新行,用来分隔不同的排序数据子组。
之前的问题核心是:在循环中插入新行时,表格的总行数会动态变化,但循环的遍历范围是固定的初始行数,导致最后几个数据子组没有被新行分隔开。
我的解决思路是:先在首次遍历中把所有需要插入行的行号存入一个列表,之后再单独遍历这个插入位置列表,插入过程中动态调整后续的插入位置行号即可。
实现代码如下:
dynamic_row_id = 0 flag_first = True for row_num in row_numbers_to_insert_list: if flag_first: self.worksheet.insert_rows(row_num) flag_first = False else: dynamic_row_id += 1 row_num += dynamic_row_id self.worksheet.insert_rows(row_num)
举个实际场景验证:如果待插入行的行号列表是[5,6,7,8,9],每插入一行就给后续的待插入行号加1,最终实际插入的位置就是5、6+1=7、7+2=9、8+3=11、9+4=13,完全符合需求。
以上就是该问题的完整解决方案,可供有相同需求的开发者参考。
内容的提问来源于stack exchange,提问作者Mateusz H.
相关产品推荐
相关产品推荐

