使用Python获取Excel文件中工作表的第一个空行

4

我需要在Excel文件中找到第一个空行,目前我正在使用Python的Openpyxl库。 我找不到任何可以满足我的需求的方法,所以我正在尝试自己编写代码。这是我的代码:

 book = load_workbook("myfile.xlsx")
 ws = book.worksheets[0]
 for row in ws['C{}:C{}'.format(ws.min_row,ws.max_row)]:
    for cell in row:
        if cell.value is None:
            print cell.value
            break

我正在遍历“C”列中的所有单元格,如果单元格为空,则会“中断”。问题是它不会中断,它只会继续打印出“None”值。

谢谢


抱歉,它不起作用,什么都不会打印出来。我试图打印它的位置,但它就是不起作用。 - user9704406
使用 break 只会退出内部循环 for cell in row: - pask
我认为这是正确的,我的外部循环只有一列...如果我退出内部循环,那么我就退出了整个程序。 - user9704406
不,你的外层循环将提供下一行。 - pask
哦,谢谢。有什么解决方案的建议吗? - user9704406
找到了一个解决方案:for cell in ws['C']: if cell.value == None: print cell.row break - user9704406
2个回答

8

1
看起来问题中使用了 ws.max_row。你建议应该如何不同地使用它?你看到问题提问者留下的关于将 is 改为 == 的评论了吗? - Jason Aller
2
@JasonAller 我没有注意到原帖中使用了ws.max_row,但这似乎解释了为什么原帖中的代码无法工作。结合ws.min_row(包含数据的最小行索引),原始帖子的代码执行“在已知包含数据的行范围内,第一行没有数据”的操作,因此答案将是None。对于原始目标“查找Excel文件中的第一个空行”,答案是ws.max_row+1。不需要for循环和if语句。 - Tim C
1
这是更好的答案。如果你有两列A和B,都填充到A20和B20,但A3为空,第一个解决方案将找到A3作为第一个空行,而这个解决方案将找到行20作为最后一个填充的行。 - PythonAmateur742

4

如果您希望在遇到任何空单元格时停止循环,则可以采用这种方式。 如果您想要整行完全为空,则可以使用all

book = load_workbook("myfile.xlsx")
ws = book.worksheets[0]
for cell in ws["C"]:
    if cell.value is None:
        print cell.row
        break
else:
    print cell.row + 1

在评论中更新问题:

ws["C"] 将从 C1:CX 获取一个切片,其中 X 是任何一列中最后填充的单元格。因此,如果 C 列恰好是最长的列且每个条目都已填充,则只会获取具有 cell is not None 的单元格,因此您不会跳出循环。如果您没有跳出循环,则将进入 else 块,并且由于您循环到了最后一个填充行,下一个空行将是下一行。


更新了答案。 - pask
行向量存储单元格的元组。在您的情况下,每行只有一个单元格。因此,row [0] -> 访问单元格.row访问行属性。顺便说一句,您在评论中提供的解决方案比这个更简洁。 - pask
我将其改为更好的版本。 - pask
非常感谢。 - user9704406
为什么要使用 print cell.row + 1 - user9704406
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接