gpt4 book ai didi

python - 如何在 Openpyxl 中找到最后一个非空白单元格?

转载 作者:行者123 更新时间:2023-11-30 22:02:12 29 4
gpt4 key购买 nike

Openpyxl 可以告诉我max_rowmax_col ,Excel 工作表的“已使用范围”。但是,此范围可以包括没有内容的单元格(如果之前已选择或更改过这些单元格)。

我想知道最后一列和最后一行有内容

( Discussion for VBA, here. )

例如,如果 -这里代表已使用范围中的空白和 _表示已使用范围之外的空白,我想选择标有 b 的列以及标有 c 的行,即使 Openpyxl 会在计算 max_row 时和max_col ,包括带破折号的行/列。

aaaaa---__
aaaaa-b-__
aaaaa---__
--------__
--c-----__
--------__
__________
__________

最佳答案

我发现 openpyxl 确实会报告已保存文件的 max_row 和 max_col 的正确值,但如果您操作工作表的内容并在保存之前需要这些值,问题仍然存在。

没有内置方法可以执行此操作,因此您最好的选择是自己搜索行和列,最好通过从报告的值开始并向左向上搜索来限制搜索。

工作表对象允许您单独访问行,但只能通过 .itercols() 访问各个列。这是否比在一个循环中扫描所有列更快取决于您期望工作表的空白程度。

from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
wb.worksheets[0]['h6'] = None

print((wb.worksheets[0].max_row, wb.worksheets[0].max_column))

def find_edges(sheet):
row = sheet.max_row
while row > 0:
cells = sheet[row]
if all([cell.value is None for cell in cells]):
row -= 1
else:
break
if row == 0:
return 0, 0

column = sheet.max_column
while column > 0:
cells = next(sheet.iter_cols(min_col=column, max_col=column, max_row=row))
if all([cell.value is None for cell in cells]):
column -= 1
else:
break
return row, column

print(find_edges(wb.worksheets[0]))

在此示例中,我加载了一个 Excel 工作表,其中包含您建议的数据,其值也仍在 H6 中,该值在第 3 行被删除。

它首先打印 openpyxl 报告的 max_rowmax_column,然后使用工作表调用 find_edges,找到所需的实际值。

对于数据很少的大工作表,一旦确定了最后一行(以限制大小),您可能希望通过简单地迭代所有列来替换列扫描来尝试速度,如下所示:

columns = sheet.iter_cols(max_row=row)
column = 1
ci = 1
while True:
try:
cells = next(columns)
if not all([cell.value is None for cell in cells]):
column = ci
ci += 1
except StopIteration:
break

但我希望对于大多数有用的用例来说,第一种方法是最快的。

如果您更喜欢简短而不是可读:

def find_edges2(sheet):
def row():
for r in range(sheet.max_row, 0, -1):
if not all([cell.value is None for cell in sheet[r]]):
return r

row = row()
if not row:
return 0, 0

def column():
for c in range(sheet.max_column, 0, -1):
if not all([cell.value is None for cell in next(sheet.iter_cols(min_col=c, max_col=c, max_row=row))]):
return c

return row, column()

关于python - 如何在 Openpyxl 中找到最后一个非空白单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53852149/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com