Как вернуть непустые значения столбцов верхней строки неизвестной длины столбца в Excel?

#python #python-3.x #openpyxl

Вопрос:

Версия Python: 3.6
Библиотека Python:
openpyxl Версия Excel: 365

Это вернет значения из каждой ячейки в 255 столбцах верхней строки файла Excel. Я поместил 255 только как временное место для остановки:

 for row in ws.iter_rows(min_row=1, max_col=255, max_row=1, values_only=True):  
     print(row)
  
 

Я не знаю, сколько столбцов с данными будет в каждой книге. Все ячейки верхней строки, содержащие данные, будут последовательно перечислены, начиная с столбца 1.

При обнаружении ячейки верхней строки без данных все оставшиеся столбцы/строки будут пустыми.

Мне нужны значения тех последовательных верхних строк, которые содержат значения.

Спасибо, что уделили мне время.

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

1. Просто просмотрите результирующий кортеж с помощью перечислителя и остановитесь на первом None

2. Спасибо за совет, @CharlieClark. Я обновлю свои выводы, но если вы хотите опубликовать ответ, я его приму.

Ответ №1:

@CharlieClark указал мне правильное направление. Что-то вроде этого сработало для меня. Мне все еще нужно было сохранить max_col=255, хотя, иначе произошла бы ошибка.

 def column_get():
    i = 1
    for row in ws.iter_rows(min_row=1, max_col=255, max_row=1, values_only=True):
        for x in row:
            if row[i] is not None:
                print(row[i])
                i  = 1
            else:
                break
 

Ответ №2:

Если я вас правильно понимаю, вы можете просто удалить значение max_col. затем он печатает значения первой строки до тех пор, пока не появится пустая ячейка. попробуйте это:

 for row in ws.iter_rows(min_row=1, max_row=1, values_only=True):  
     print(row)
 

Если вы все еще видите много значений «Нет», проверьте, не содержит ли первая строка листа какое-либо значение, ошибочно введенное как «Нет». Я бы посоветовал вам отладить его следующим образом: создайте новый пустой лист и вставьте вручную тестовые данные — посмотрите, работает ли это. если это произойдет, скопируйте и вставьте вручную данные с фактического листа в тестовый.

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

1. Да, вы могли бы так подумать, но после этого я получил 487 записей «Нет».

2. @ArkhamAngel странно. Я просто попробовал, прежде чем ответить, и это сработало. Я попробовал это на Python 3.8.1 openpyxl 3.0.7

3. @ArkhamAngel Вы уверены, что первая строка вашего листа не содержит никакого значения, ошибочно введенного как Нет? Я бы посоветовал вам отладить его следующим образом: создайте новый пустой лист и вставьте вручную тестовые данные — посмотрите, работает ли это. если это произойдет, скопируйте и вставьте вручную данные с фактического листа в тестовый

4. Я попробую это и, надеюсь, не забуду вернуться и обновить.

5. Ширина строк во многом зависит от структуры рабочего листа, который хранится в виде разреженной матрицы, но лучше всего думать, что он всегда имеет ширину 16 384 кол. и длину около миллиона строк.