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

问题描述 投票:0回答:5

我正在使用 openpyxl 对所有包含“默认”的行进行数据验证。但要做到这一点,我需要知道有多少行。

我知道如果我使用 Iterable 工作簿模式,有一种方法可以做到这一点,但我还向工作簿添加了一张新工作表,并且在 Iterable 模式下这是不可能的。

python excel openpyxl
5个回答
81
投票

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

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

len(ws['A'])

尽管值得注意的是,对于单列的数据验证,Excel 使用

1:1048576
.


5
投票

这很适合我。它给出了每列中的非空行数,假设它们之间没有空行。

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])
    print("Column: {}, Row numbers: {}".format(col_letter, max_col_row)

1
投票

这是其他可能有用的解决方案——因为 openpyxl 函数 max_row 和 max_column 也考虑了应用样式的空单元格,我认为在这种情况下使用 pandas 更好:

import pandas as pd

def get_max_row_column(df, sheet_name):
    max_row = 1
    max_col = 1
    for sh_name, sh_content in df.items():
        if sh_name == sheet_name:
            max_row = len(sh_content) + 1
            max_col = len(sh_content.columns)
            break
    coordinates = {'max_row': max_row, 'max_col': max_col}
return coordinates

df = pd.read_excel('xls_path', sheet_name=None)
max_row = get_max_row_column(df, 'Test_sheet')['max_row']
max_col = get_max_row_column(df, 'Test_sheet')['max_col']

通过提供 sheet_name=None 我创建了所有工作表的字典,其中键是工作表名称和值表内容(实际上是 pandas DataFrame)。


0
投票

求行长和列长

专栏:

column=sheet['A']
output tuple-->(A1,A2,A3........An)

len(column)
output length--> 18                    

对于行长:

for i in sheet.iter_rows(max_row=0):

    print(len(i))

    break

这将为您提供放置功能名称的标题行的长度。 如果您想获得所有行的长度,请添加 max_row=len(column) 并删除 break.


0
投票

注意: 此方法假定您使用的列在值之间没有空白单元格

| A       | B      | C     |
|:--------|:-------|:------|
| 10R46   | 1005   | 8017  |
| 10R46   | 10335  | 5019  |
| 100R91  | 1005   | 8017  | 
| 10R91   | 243    | 8870  | 
| 10M95   | 4918   | 8305  |
| 10M95   | 9017   | 8305  |
|         | 9470   | 8221  |

将列的所有单元格值附加到一个非空列表中,然后获取该列表的长度

import openpyxl as xl

wb = xl.load_workbook('workbook1.xlsx', read_only=False)
ws = wb['sheet1']

last_row = [cell for cell in ws['A'] if cell.value]

print(len(last_row))

last_row的结果:

6
© www.soinside.com 2019 - 2024. All rights reserved.