2013-05-12 11 views
7

Sto tentando di aprire un file xlsx e di stampare solo il contenuto di esso. Continuo a correre in questo errore:Errore: formato non supportato o file corrotto: record BOF previsto

import xlrd 
book = xlrd.open_workbook("file.xlsx") 
print "The number of worksheets is", book.nsheets 
print "Worksheet name(s):", book.sheet_names() 
print 

sh = book.sheet_by_index(0) 

print sh.name, sh.nrows, sh.ncols 
print 

print "Cell D30 is", sh.cell_value(rowx=29, colx=3) 
print 

for rx in range(5): 
    print sh.row(rx) 
    print 

esso stampa questo errore

raise XLRDError('Unsupported format, or corrupt file: ' + msg) 
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\xff\xfeT\x00i\x00m\x00' 

Grazie

+0

Qual è la tua versione di xlrd? –

+0

9.2 Credo che sia il più recente – user2353003

risposta

8

Il messaggio di errore si riferisce al BOF (all'inizio del file) registrazione di un file XLS. Tuttavia, l'esempio mostra che stai provando a leggere un file XLSX.

ci sono 2 possibili ragioni per questo:

  1. La versione di XLRD è vecchio e non supporta i file XLSX lettura.
  2. Il file XLSX è crittografato e quindi archiviato nel formato OLE Compound Document, piuttosto che in un formato zip, facendolo sembrare xlrd come un file XLS di formato precedente.

Verificare che di fatto si stia utilizzando una versione recente di xlrd. L'apertura di un nuovo file XLSX con dati in una sola cella dovrebbe verificarlo.

Tuttavia, suppongo che tu stia riscontrando la seconda condizione e che il file sia crittografato poiché dichiari che stai già utilizzando la versione 0.9.2 di xlrd.

I file XLSX sono crittografati se si applica esplicitamente una password della cartella di lavoro ma anche se si protegge con password alcuni elementi del foglio di lavoro. Come tale è possibile avere un file XLSX crittografato anche se non è necessaria una password per aprirlo.

Aggiornamento: vedere @ BStew, terza, più probabile, risposta, che il file è aperto da Excel.

10

C'è anche un terzo motivo. Il caso in cui il file è già aperto da Excel. Genera lo stesso errore.

+1

Queste tre frasi mi hanno risparmiato un sacco di tempo e frustrazione! –

6

E forse la quarta ragione, hai usato read_excel per leggere un file csv. (Questo è quello che è successo a me ...)

1

È possibile ottenere questo errore quando il file xlsx è in realtà html; puoi aprirlo con un editor di testo per verificarlo. Quando ho ricevuto questo errore l'ho risolto usando i panda:

import pandas as pd 
df_list = pd.read_html('filename.xlsx') 
df = pd.DataFrame(df_list[0]) 
Problemi correlati