簡體   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