Использование openpyxl max_col в качестве параметра max в моем для l oop нарушает мой код, чем я могу заменить это? Изменить: я исправил это - PullRequest
0 голосов
/ 21 июня 2020

Я использую openpyxl с python 3.8.3 в pycharm для получения информации из электронной таблицы Excel. Я использую для l oop, чтобы искать по всей строке заданное c имя. Вот мой код:

 for i in range(1, ws.max_col):
        column_cell = ws.cell(column=i, row=todays_row)
        # print(column_cell)
        if ws[column_cell].value == recipient:
            cells_with_name.append(str(i))

Если есть еще что-то полезное, я могу добавить еще. Ранее я объявил column_cell как глобальную переменную, поэтому не думаю, что это проблема. В коде ошибки указано, что ws.max_col не имеет значения. Я попытался заменить его на ws.max_column, но это дало более длинную ошибку, говоря в основном то же самое. Я новичок в python, поэтому может быть что-то очевидное я пропустил. Спасибо!

(И последнее, все это происходит в функции, хотя я не знаю, имеет ли это значение.)

Изменить: вот мой код ошибки, я не Не знаю, поможет ли это:

  File "D:/Users/MyUse/PycharmProjects/inpyscheduler/mainEmail.py", line 25, in create_message
    ws_max_col = ws["max_column"].value
  File "D:\Users\MyUse\PycharmProjects\inpyscheduler\venv\lib\site-packages\openpyxl\worksheet\worksheet.py", line 286, in __getitem__
    min_col, min_row, max_col, max_row = range_boundaries(key)
  File "D:\Users\MyUse\PycharmProjects\inpyscheduler\venv\lib\site-packages\openpyxl\utils\cell.py", line 135, in range_boundaries
    raise ValueError(msg)
ValueError: max_column is not a valid coordinate or range

Редактировать 2: Вот мой новый код:

    for i in range(1, ws.max_column+1):
        column_cell = ws.cell(column=i, row=todays_row)
        # print(column_cell)
        if ws[column_cell].value == recipient:
            cells_with_name.append(str(i))

И вот моя ошибка:

  File "D:/Users/MyUse/PycharmProjects/inpyscheduler/mainEmail.py", line 34, in create_message
    if ws[column_cell].value == recipient:
  File "D:\Users\MyUse\PycharmProjects\inpyscheduler\venv\lib\site-packages\openpyxl\worksheet\worksheet.py", line 286, in __getitem__
    min_col, min_row, max_col, max_row = range_boundaries(key)
  File "D:\Users\MyUse\PycharmProjects\inpyscheduler\venv\lib\site-packages\openpyxl\utils\cell.py", line 133, in range_boundaries
    m = ABSOLUTE_RE.match(range_string)
TypeError: expected string or bytes-like object

Опять же, извините, если это странно отформатировано, я новичок как в python, так и в Stackoverflow.

1 Ответ

0 голосов
/ 21 июня 2020

Я уверен, что вы использовали параметр max_column в неправильном формате.

Это worksheet.max_column не max_col.

например:

for row in range(1, ws.max_row+1):
    for col in (1, ws.max_column+1):
        cell = ws.cell(row=row, column=col)
        print(cell.value) 

И когда вы хотите получить значение ячейки, пожалуйста, используйте cell.value, а не ws[cell].value,

или ws['A1'].value также хорошо работает.

...