有没有任何方法可以使用 openpyxl 获取 .xlsx 工作表中存在的行数和列数? 在xlrd中,
sheet.ncols
sheet.nrows
将给出列数和行数。 openpyxl中有这样的方法吗?
给定一个变量
sheet
,可以通过以下方式之一确定行数和列数:
rows = sheet.max_row
columns = sheet.max_column
rows = sheet.max_rows
columns = sheet.max_column
rows = sheet.nrows
columns = sheet.ncols
rows = sheet.max_row
columns = sheet.max_column
基于 Dani 的解决方案,但没有足够的声誉来发表评论。我通过添加手动控制来编辑代码,以减少搜索所消耗的时间
## iteration to find the last row with values in it
nrows = ws.max_row
if nrows > 1000:
nrows = 1000
lastrow = 0
while True:
if ws.cell(nrows, 3).value != None:
lastrow = nrows
break
else:
nrows -= 1
工作表有以下方法:'dim_colmax','dim_colmin','dim_rowmax','dim_rowmin'
下面是一个小例子:
import pandas as pd
writer = pd.ExcelWriter("some_excel.xlsx", engine='xlsxwriter')
workbook = writer.book
worksheet = writer.sheets[RESULTS_SHEET_NAME]
last_row = worksheet.dim_rowmax
这就是逻辑
number_of_rows = sheet_obj.max_row
last_row_index_with_data = 0
while True:
if sheet_obj.cell(number_of_rows, 3).value != None:
last_row_index_with_data = number_of_rows
break
else:
number_of_rows -= 1
使用 Pandas 获取所有工作表行数和列数的解决方案。它使用
df.shape
来获取计数。
import pandas as pd
xl = pd.ExcelFile('file.xlsx')
sheetnames = xl.sheet_names # get sheetnames
for sheet in sheetnames:
df = xl.parse(sheet)
dimensions = df.shape
print('sheetname', ' --> ', sheet)
print(f'row count on "{sheet}" is {dimensions[0]}')
print(f'column count on "{sheet}" is {dimensions[1]}')
print('-----------------------------')
尝试
import xlrd
location = ("Filelocation\filename.xlsx")
wb = xlrd.open_workbook(location)
s1 = wb.sheet_by_index(0)
s1.cell_value(0,0) #initializing cell from the cell position
print(" No. of rows: ", s1.nrows)
print(" No. of columns: ", s1.ncols)
当我需要非空列的数量时,我发现更有效的是 请注意,它给出的是非空列的数量,而不是列的总数。当我说更高效时,我指的是实现目标的最简单方法,而不是最快(我没有测试执行速度)。 下面,
sheet
是openpyxl.worksheet.worksheet.Worksheet
的一个实例:
values = list(sheet.values) #values is a list of tuple of same len
nb_cols = len(values[0])
如果我需要非空行的数量,我会这样做:
nb_lines = len([v for v in sheet.values if any(v)])
注意最后一条指令可能会失败:如果一行只有 0,则被视为空。