我正在使用 openpyxl 对所有包含“默认”的行进行数据验证。但要做到这一点,我需要知道有多少行。
我知道如果我使用 Iterable 工作簿模式,有一种方法可以做到这一点,但我还向工作簿添加了一张新工作表,并且在 Iterable 模式下这是不可能的。
ws.max_row
将为您提供工作表中的行数。
从 openpyxl 2.4 版本开始,您还可以访问单独的行和列并使用它们的长度来回答问题。
len(ws['A'])
尽管值得注意的是,对于单列的数据验证,Excel 使用
1:1048576
.
这很适合我。它给出了每列中的非空行数,假设它们之间没有空行。
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)
这是其他可能有用的解决方案——因为 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)。
求行长和列长
专栏:
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.
注意: 此方法假定您使用的列在值之间没有空白单元格
| 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