Захватывать списки в одном столбце и разделять их пустыми ячейками, используя openpyxl или python - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть лист Excel с несколькими списками в одном столбце, но разделенными пустыми ячейками. Я пытаюсь сохранить первый из этих списков, но я знаю только адрес ячейки заголовка для этого списка. Длина каждого списка (т. Е. Количество строк) может варьироваться, поэтому я не могу зафиксировать общее количество строк для перебора.

Мое решение было сосредоточено вокруг поиска первой пустой ячейкипри итерации по столбцу, начиная со строки заголовка списка.

'' '# load "target" сводная рабочая книга data_wb = load_wb ("book3.xlsx")

# select worksheet to paste data
data_ws = data_wb["Sheet1"]

''' In Excel file "book3.xlsx", 
List 1 in Range ($A$4:$A$9), 
List 2 in Range ($A$12:$A$20), 
List 3 in Range ($A$22:$A$27)'''

lastrow_list=[]    

for row in data_ws.iter_rows(min_col=1,max_col=1, min_row = 4, max_row=100):
    for cell in row:
        if cell.value == None:
            food_list.append(first_list)
            break
        else:
            first_list.append(cell.value)
            continue

print(food_list[0])
print(food_list[1])
print(len('food_list'))

' '' '' '

['Fruit List', 'apple', 'banana', 'orange', 'grape', 'kiwi', 'Vegetable 
List', 'broccoli', 'kale', 'cauliflower', 'onion', 'potato', 'carrot', 
'lettuce', 'kohlrabi', 'Fish List', 'salmon', 'cod', 'tuna', 'trout', 
'halibut']
['Fruit List', 'apple', 'banana', 'orange', 'grape', 'kiwi', 'Vegetable 
List', 'broccoli', 'kale', 'cauliflower', 'onion', 'potato', 'carrot', 
'lettuce', 'kohlrabi', 'Fish List', 'salmon', 'cod', 'tuna', 'trout', 
'halibut']
9

'' '

Выходные данные из приведенного выше кода дают список списков (я показываю первые два элемента этого списка), где каждый элемент представляет собой список всех трех списков Excel вместе взятых. Я не уверен, почему есть 9 из этих комбинированных списков. В конце я хотел бы получить только «Список фруктов» (не «Список овощей» или «Список рыб»).

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

'''Файл Excel, содержащий 3 списка в одном столбце, разделенных пустыми строками. Список 1: А4: А9, Список 2: А12: А20, Список 3: А22: А27

Row   Col A
1
2
3
4     Fruit List    <-- "Iterate down Col A starting at Row 4"
5     apple
6     banana
7     orange
8     grape
9     kiwi
10                  <-- "Stop iteration at the first empty cell
11
12    Vegetable List
13    broccoli
14    kale
15    cauliflower
16    onion
17    potato
18    carrot
19    lettuce
20    kohlrabi
21
22    Fish List
23    salmon
24    cod
25    tuna
26    trout
27    halibut       <-- "Last non-empty row in worksheet"
28              

' ''

...