2015-05-11 10 views
15

Ho una semplice EXCEL-foglio con i nomi delle città nella colonna A e voglio estrarli e metterli in una lista:Quali sono le cause "UserWarning: Discarded intervallo con nome riservato" - 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() 

Con un piccolo file che ha funzionato perfettamente (70 righe). Ora sto elaborando un grande file (8300 righe) e mi dà questo errore:

/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") 

ma non abortire. Semplicemente non sembra continuare più. Qualcuno può dirmi cosa potrebbe causare l'errore? È qualcosa nel .xlsx? Qualche suggerimento speciale su cosa posso cercare?

risposta

15

Si suppone che sia un avviso amichevole che consente di sapere che alcuni dei nomi definiti vengono persi durante la lettura del file. Gli avvertimenti in Python non sono eccezioni ma notifiche informative.

Il supporto per i nomi definiti è essenzialmente limitato ai riferimenti agli intervalli di celle in openpyxl al momento. Ma possono fare riferimento a molte altre cose, come le impostazioni di stampa. Tuttavia, se gli oggetti/valori a cui si riferiscono non vengono conservati da openpyxl e il file viene salvato e successivamente aperto da Excel, potrebbe lamentarsi degli oggetti mancanti.

+1

Come posso sapere dove potrebbe essere successo? – steph

+0

Bene, ho scoperto che i fogli esportati dai fogli di lavoro Google attivano questo avviso. Se si copia/incolla il contenuto, l'avviso non viene visualizzato. Quindi suppongo che Google includa alcune impostazioni predefinite che a openpyxl non piacciono ?! ... – steph

+3

Se si guarda all'origine della cartella di lavoro (un file Excel è solo un archivio zip) vedrete i nomi definiti. Escludiamo tutti i nomi che iniziano '_xlnm'. A occhio e croce, suggerisco che Google includa alcune impostazioni della stampante per impostazione predefinita. In ogni caso l'avvertimento è informativo nel caso in cui manchi qualcosa e tu vuoi sapere perché. –

8

Nel mio caso questo avviso si presenta quando il filtro si trova su uno dei miei fogli di lavoro. Ho voluto eliminare l'avviso in modo che non ci ha disturbato i miei utenti e ho appena messo questa riga nel mio codice prima della chiamata openpyxl.load_workbook:

warnings.simplefilter("ignore") 
+0

Ho ricevuto questo avviso anche quando il mio foglio di lavoro contiene l'auto_filter. È un bug di openpyxl? @ Charlie Clark – Jruv

3

Se si vuole ignorarlo:

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