Возврат списка всех адресов ячеек в диапазоне - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть список диапазонов (загруженных из рабочей книги Excel через openpyxl) в списке (например, rng_list = ['$A$1:$A$3', '$B$1:$B$3', '$C$1:$C$3']), и я хотел бы «распаковать» каждый из этих диапазонов в отдельные списки в списке списков (т.е. , unpacked_list = [['$A$1','$A$2','$A$3'], ['$B$1','$B$2','$B$3'], ['$C$1','$C$2','$C$3']]).

Пожалуйста, ознакомьтесь с кодом ниже того, что я пробовал до сих пор в ноутбуке Jupyter. Любые мысли о том, почему я получаю ошибку ниже? или если у вас есть идеи о том, как я мог бы подойти к этому с другой стороны, это было бы очень ценно! Спасибо!

    import os
    from openpyxl import Workbook
    from openpyxl.utils import get_column_letter

    # create temp worksheet
    wb_A = Workbook() 
    sheet_A = wb_A.create_sheet('sheetA')

    # list with Excel ranges as str items in list
    rng_list = ['$A$1:$B$10', '$C$1:$D$10', '$E$1:$F$10']
    temp_list = []
    unpacked_list = []


    for item in rng_list:
        for row in sheet_A(item): # use range from item in rng_list to iterate 
                                    through range in temp worksheet
            for cell in row:
                x = cell.row
                y = cell.column
                addr = get_column_letter(y) + str(x)
                temp_list.append(addr)
            unpacked_list.append(addr)

    # delete temp worksheet
    wb_A.remove(sheet_A)

    unpacked_list

Я надеялся использовать диапазон str из списка для итерации по «фиктивному рабочему листу», созданному просто для итерации по диапазону ячеек и захвата соответствующих адресов ячеек в этом диапазоне. Я получаю следующую ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-85-13b28d369550> in <module>
     14 
     15 for item in rng_list:
---> 16     for row in sheet_A(item): # use range from item in rng_list to iterate through range in temp worksheet
     17         for cell in row:
     18             x = cell.row

TypeError: 'Worksheet' object is not callable

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

После исправления синтаксической ошибки в моем исходном коде (спасибо, Рахасья Прабхакар!), Я изменил свой исходный код для работы по мере необходимости.

В частности, мне нужно было переопределить '' 'temp_list' '' какпустой список в начале начального цикла For и добавьте к '' 'unpacked_list' '' в конце начального цикла For, чтобы получить требуемый список списков распакованных диапазонов.

''' импортировать ОС из openpyxl Импорт рабочей книги из openpyxl.utils import get_column_letter

# create temp worksheet
wb_A = Workbook() 
sheet_A = wb_A.create_sheet('sheetA')

# list with Excel ranges as str items in list
rng_list = ['$A$1:$B$10', '$C$1:$D$10', '$E$1:$F$10']
temp_list = []
unpacked_list = []


for item in rng_list:
    temp_list=[]
    for row in sheet_A[item]: # use range from item in rng_list to iterate through 
                                range in temp worksheet
        for cell in row:
            x = cell.row
            y = cell.column
            addr = get_column_letter(y) + str(x)
            temp_list.append(addr)
    unpacked_list.append(temp_list)

# delete temp worksheet
wb_A.remove(sheet_A)

print(unpacked_list)

'' '

0 голосов
/ 01 ноября 2019

Синтаксис! для доступа к ячейкам необходимо использовать квадратные скобки, скобки используются для вызовов функций

, это должен быть sheet_A [item]

...