2015-05-11 25 views
15

我有一個簡單的EXCEL表在A列的城市的名字,我想提取它們,並把它們放在一個列表:是什麼原因導致「UserWarning:廢棄的範圍內保留名稱」 - openpyxl

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中?任何特別的提示我可以找到什麼?

回答

15

它應該是一個友好的警告,讓你知道一些定義的名字在讀取文件時會丟失。 Python中的警告不是例外,而是信息通知。

對定義名稱的支持基本上侷限於目前在openpyxl中對單元格區域的引用。但他們可以參考很多其他的東西,如打印設置。但是,如果它們引用的對象/值不由openpyxl保存,並且該文件被保存並隨後由Excel打開,它可能會抱怨丟失的對象。

+1

我怎樣才能找出這可能發生的地方? – steph

+0

那麼,我發現從Google電子表格導出的表格會觸發此警告。如果您複製/粘貼內容,則不會顯示警告。所以我想Google包含了一些預設openpyxl不喜歡?! ... – steph

+3

如果您查看工作簿的源代碼(一個Excel文件只是一個zip文件),您將看到已定義的名稱。我們排除所有以'_xlnm'開頭的名字。在猜測中,我建議Google默認包含一些打印機設置。在任何情況下,警告都是有用的,以防萬一缺少某些東西,並且你想知道爲什麼。 –

8

在我的情況下,當我在其中一個工作表上進行過濾時,會顯示此警告。我想取消此警告,以便它沒有打擾我的用戶,我只是把這個線在我的代碼openpyxl.load_workbook調用之前:

warnings.simplefilter("ignore") 
+0

當我的工作表包含auto_filter時,我也得到了這個警告。它是一個openpyxl的bug嗎? @Charlie Clark – Jruv

3

如果你想忽略它:

import warnings 
warnings.simplefilter("ignore") 
wb = load_workbook(path) 
warnings.simplefilter("default") 
相關問題