Что вызывает "UserWarning: Отброшенный диапазон с зарезервированным именем" - openpyxl

У меня есть простой EXCEL-лист с названиями городов в столбце A, и я хочу извлечь их и поместить их в список:

def getCityfromEXCEL():
    wb = load_workbook(filename='test.xlsx', read_only=True)
    ws = wb['Sheet1']
    cityList = []

    for i in range(2, ws.get_highest_row()+1):
        acell = "A"+str(i)
        cityString = ws[acell].value
        city = ftfy.fix_text_encoding(cityString)            
        cityList.append(city)

getCityfromEXCEL()

С небольшим файлом, который отлично работал (70 строк). Теперь я обрабатываю большой файл (8300 строк), и он дает мне эту ошибку:

/Library/Python/2.7/site-packages/openpyxl/workbook/names/named_range.py:121: UserWarning: Discarded range with reserved name
  warnings.warn("Discarded range with reserved name")

но он не прерывается. Кажется, он больше не продолжается. Может кто-нибудь сказать мне, что может вызвать ошибку? Это что-то в .xlsx? Любые специальные подсказки, которые я могу найти?

Ответы

Ответ 1

Это должно быть дружественное предупреждение, дающее вам знать, что некоторые определенные имена теряются при чтении файла. Предупреждения в Python не являются исключениями, а информационными уведомлениями.

Поддержка определенных имен по существу ограничена ссылками на диапазоны ячеек в openpyxl на данный момент. Но они могут ссылаться на множество других вещей, таких как настройки печати. Однако, если объекты/значения, на которые они ссылаются, не сохраняются openpyxl, и файл сохраняется и позже открывается Excel, он может жаловаться на недостающие объекты.

Ответ 2

В моем случае это предупреждение появляется, когда фильтрация находится на одном из моих рабочих листов. Я хотел подавить предупреждение, чтобы он не беспокоил моих пользователей, и я просто поместил эту строку в свой код перед вызовом openpyxl.load_workbook:

warnings.simplefilter("ignore")

Ответ 3

Если вы хотите игнорировать его:

import warnings
warnings.simplefilter("ignore")
wb = load_workbook(path)
warnings.simplefilter("default")