繁体   English   中英

有没有一种简单的方法可以迭代 openpyxl 中不相交的 Excel 工作表范围?

[英]Is there a simple way to iterate over a disjoint range of Excel sheet in openpyxl?

我需要迭代具有'A1', 'O1', 'R1:S1'结构的不相交范围 有很多工作簿,并且在每个工作簿的相应工作表中有很多行要迭代(例如,“Sheet1”的第 21、24、31:35、40 行)。 是否有一种简单的方法可以使用 openpyxl 或其他库对其进行迭代?

目前我对每一行使用以下内容,这是不可接受的。

wb = openpyxl.load_workbook(filename)

sheet = wb['Sheet1']
for cellObj in sheet['A1:S2']:
    for cell in cellObj:
        pass

我未能在文档中找到提示。 在这种情况下可能有其他图书馆或不同的方法适用吗?

我不相信库中有内置的东西,但你可能会做这样的事情:

wb = openpyxl.load_workbook(filename)
sheet = wb['Sheet1']

rows = [21, 24] + list(range(31, 36) + [40]
cols = ["A", "O", "R", "S"]

for row in rows:
    for col in cols:
        cell = sheet[f"{col}{row}"]

在这种情况下, RS是连续的,所以没有太大问题。 如果您有更大的范围,手动编写会很乏味,请查看如何创建字符范围并以与rows相同的方式使用它。


正如stovfl所指出的,字符串格式可能更昂贵。 由于我们有单元格的行和列,我们可以使用Worksheet.cell方法进行简单的转换:

from openpyxl.utils.cell import column_index_from_string

...
cols = ["A", "O", "R", "S"]
cols = [column_index_from_string(col) for col in cols]
...
        cell = sheet.cell(row=row, col=col)
  • 当然,如果您首先为cols使用整数表示法,则不需要转换,并且访问将作为最后一行代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM