如何使用openpyxl普通工作簿查找列中的最后一行?

hum*_*man 15 python excel openpyxl

我正在使用openpyxl将数据验证放到其中包含"Default"的所有行中.但要做到这一点,我需要知道有多少行.

我知道如果我使用Iterable工作簿模式,有一种方法可以做到这一点,但我还在工作簿和可迭代模式中添加了一个新工作表,这是不可能的.

Cha*_*ark 35

ws.max_row 将为您提供工作表中的行数.

从版本openpyxl 2.4开始,您还可以访问各个行和列,并使用它们的长度来回答问题.

len(ws['A'])

虽然值得注意的是Excel用于单列的数据验证1:1048576.

  • 但是,`ws.max_row`不会检查最后一行是否为空.如果使用_Del_键删除工作表末尾的单元格_content_或删除重复项,则数据末尾的剩余空行仍将计为已用行.如果您不想保留这些空行,则必须通过选择电子表格左侧的行号并删除它们来删除这些**整行**行(右键单击选定的行号 - >删除) (4认同)
  • 这两种方法给我相同的结果。我错过了什么吗?`ws.max_row` 给我整个工作表中最后填充的行。并且 `len(ws['A'])` 应该给我该特定列的长度。如果最长的行是 10,但“A”列填充了 3 个单元格,则后一种方法应该给出 3,而不是 10。 (4认同)
  • 为什么这是公认的答案?正如其他人评论的那样,这显然是不正确的 - `len(ws['A'])` 返回与 `ws.max_row` 相同的值,即整个电子表格中最长列的长度 - 而不是行数在单独的“A”列中。 (3认同)
  • `max_row` 和 `max_column` 不适用于 `sheet = wb.active`。我正在使用 `openpyxl==2.4.8` (2认同)

Dan*_*nyG 8

这对我来说很有效。它给出每列中非空行的数量,假设中间没有空行。

from openpyxl import load_workbook as lw
from openpyxl.utils import get_column_letter

wb = lw(your_xlsx_file)
ws = wb[sheet_name]

for col in range(1, ws.max_column + 1):
    col_letter = get_column_letter(col)
    max_col_row = len([cell for cell in ws[col_letter] if cell.value is not None])
    print("Column: {}, Row numbers: {}".format(col_letter, max_col_row)
Run Code Online (Sandbox Code Playgroud)

根据 @CharlieClark 建议更新了代码