是什么导致"UserWarning:丢弃范围与保留名称" - openpyxl

ste*_*eph 16 python-2.7 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()
Run Code Online (Sandbox Code Playgroud)

使用一个完美的小文件(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")
Run Code Online (Sandbox Code Playgroud)

但它并没有中止.它似乎不再继续下去了.有人能告诉我可能导致错误的原因吗?它是.xlsx中的东西吗?我能找到什么特别提示吗?

Cha*_*ark 15

它应该是一个友好的警告,让您知道在读取文件时某些已定义的名称会丢失.Python中的警告不是例外,而是信息通知.

对定义名称的支持基本上仅限于在openpyxl中对单元格范围的引用.但他们可以参考很多其他的东西,比如打印设置.但是,如果openpyxl不保留它们引用的对象/值,并且文件被保存并稍后由Excel打开,则可能会抱怨丢失的对象.

  • 如果查看工作簿的源代码(Excel文件只是一个zip存档),您将看到已定义的名称.我们排除所有以'_xlnm'开头的名字.据猜测,我建议Google默认包含一些打印机设置.在任何情况下,如果缺少某些内容并且您想知道原因,警告就会提供信息. (3认同)
  • 为了找到丢弃的内容,我将excel电子表格文件解压缩到它自己的目录,然后使用grep:`grep -ri _xlnm C:\ the\unzipped\dir` (2认同)

int*_*ero 9

在我的情况下,当我的一个工作表上有过滤时,会出现此警告.我想抑制警告,以免它对我的用户造成麻烦,我只是在openpyxl.load_workbook调用之前将这行放在我的代码中:

warnings.simplefilter("ignore")
Run Code Online (Sandbox Code Playgroud)


e18*_*18r 7

如果你想忽略它:

import warnings
warnings.simplefilter("ignore")
wb = load_workbook(path)
warnings.simplefilter("default")
Run Code Online (Sandbox Code Playgroud)