Как выбрать только определенные значения, просматривая столбец с помощью openpyxl?

#python-3.x #openpyxl

#python-3.x #openpyxl

Вопрос:

Мне нужно использовать openpyxl для выполнения приведенного ниже. У меня есть несколько листов со столбцом, скажем, C, со значениями, указанными ниже, и мне нужно выбрать только последнее значение из каждого блока:

 C


Student Fees
1223
3345
123

Student Fees
110
111
1111
345
-1923

Student Fees
267
4566
3456
  

Итак, мой вывод должен быть таким:

 123
-1923
3456
  

Я пытаюсь сделать это с помощью приведенного ниже кода:

 for cell in WS['C']:
 if(cell.value is not None):
   if(str(cell.value == 'Student Fees'):
     print("{1}".format(cell.value, cell.offset(-1,0).value)
  

Я могу перебирать столбец total и печатать все, но я не могу понять, как печатать только необходимые последние значения. Как это сделать??

Ответ №1:

Вы можете легко сделать это, установив условия, которые должны быть выполнены: пустая ячейка под ячейкой, содержащей «Студенческие сборы».

 marker = False
for cell in ws['C']:
    if cell.value and if cell.value == "Student Fees":
        marker = True
    elif marker and if cell.value is None:
        print(cell.offset(row=-1).value)
        marker = False
  

Комментарии:

1. У меня есть несколько листов, и это работает для большинства из них, но для некоторых это выдает ошибку ValueError. Есть идеи, почему это может происходить? Индекс строки, равный -1, не должен быть проблемой, потому что он работает для большинства листов? Что вы думаете?

2. Вы всегда должны предоставлять обратную трассировку ошибок, но я подозреваю, что это происходит, когда вы проверяете «Плату за обучение».

3.Извините, я не знал стандартов Stackoverflow. Я запомню это. Обратная трассировка выглядит следующим образом: File "marks.py", line 17, in <module> print(cell.offset(row=-1).value) File "/<the whoe path>/lib64/python3.6/site-packages/openpyxl/cell/cell.py", line 307, in offset return self.parent.cell(column=offset_column, row=offset_row) File "/<the whole>/lib64/python3.6/site-packages/openpyxl/worksheet/worksheet.py", line 237, in cell raise ValueError("Row or column values must be at least 1") ValueError: Row or column values must be at least 1

4. Таким образом, вы не можете смещать (строка =-1) из первой строки.

5. Хорошо, да, это имеет смысл. Но что меня удивляет, так это то, что это работает для большинства листов, но для некоторых это не удается. Я не понимаю, почему он может найти a cell.offset(row=-1) для некоторых листов, но не для других. Есть идеи, почему это может произойти?