[英]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}"]
在這種情況下, R
和S
是連續的,所以沒有太大問題。 如果您有更大的范圍,手動編寫會很乏味,請查看如何創建字符范圍並以與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.