Есть ли простой способ перебора непересекающегося диапазона листа Excel в openpyxl? - PullRequest
0 голосов
/ 22 января 2020

Мне нужно перебрать непересекающийся диапазон со структурой 'A1', 'O1', 'R1:S1'. Существует много рабочих книг, и есть много строк для повторения в соответствующем листе каждой рабочей книги (скажем, строки 21, 24, 31:35, 40 из «Лист1»). Есть ли простой способ перебрать его с помощью openpyxl или другой библиотеки?

На данный момент я использую следующее для каждой строки, что недопустимо.

wb = openpyxl.load_workbook(filename)

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

Мне не удалось найти подсказку в документации. Может быть, какая-то другая библиотека или другой подход применим в таких случаях?

1 Ответ

1 голос
/ 23 января 2020

Я не верю, что для этого есть какая-то встроенная библиотека, но вы можете сделать что-то вроде:

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, преобразование не потребуется, и доступ будет выглядеть как последняя строка кода.
...