Error: Formato no admitido, o archivo dañado: registro BOF esperado

Estoy tratando de abrir un archivo xlsx y simplemente imprimir su contenido. Sigo corriendo en este error:

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 

Imprime este error

 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' 

Gracias

El mensaje de error se relaciona con el registro BOF (Comienzo del archivo) de un archivo XLS. Sin embargo, el ejemplo muestra que está intentando leer un archivo XLSX.

Hay 2 razones posibles para esto:

  1. Su versión de xlrd es antigua y no admite la lectura de archivos xlsx.
  2. El archivo XLSX está cifrado y, por lo tanto, se almacena en el formato de documento compuesto OLE, en lugar de un formato zip, lo que hace que parezca xlrd como un archivo XLS de formato más antiguo.

Verifique que de hecho esté usando una versión reciente de xlrd. La apertura de un nuevo archivo XLSX con datos en una sola celda debe verificarlo.

Sin embargo, me imagino que está encontrando la segunda condición y que el archivo está encriptado, ya que indica que ya está utilizando xlrd versión 0.9.2.

Los archivos XLSX se cifran si aplica explícitamente una contraseña de libro de trabajo, pero también si protege con contraseña algunos de los elementos de la hoja de trabajo. Como tal, es posible tener un archivo XLSX cifrado incluso si no necesita una contraseña para abrirlo.

Actualización : vea @ BStew’s, tercera, más probable, respuesta, que el archivo está abierto por Excel.

También hay una tercera razón. El caso cuando el archivo ya está abierto por Excel. Genera el mismo error.

Y quizás la cuarta razón, usaste read_excel para leer un archivo csv. (Eso es lo que me pasó …)

Puede obtener este error cuando el archivo xlsx es en realidad html; Puedes abrirlo con un editor de texto para verificar esto. Cuando obtuve este error lo resolví usando pandas:

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

En mi caso, el problema fue con la carpeta compartida.

CASO EN PUNTO: Tengo una carpeta compartida en el servidor WIN2012 donde el usuario suelta el archivo .xlsx y luego usa mi secuencia de comandos de Python para cargar ese archivo xlsx en una tabla de base de datos.

A pesar de que el usuario eliminó el archivo antiguo y lo colocó en el archivo que se iba a cargar, el error BOF siguió mencionando una cadena de bytes y el nombre del usuario en la cadena de bytes, no dentro del archivo xlsx en ninguna hoja de trabajo Estaba ahí el nombre del usuario. Además, cuando copié el .xlsx en una carpeta recién creada y ejecuté el script que hacía referencia a esa nueva carpeta, funcionó.

Así que al final, eliminé la carpeta compartida y me di cuenta de que se eliminaron 5 elementos a pesar de que solo un elemento era visible para mí y para el usuario. Creo que se debe a mi falta de habilidades de administración de Windows, pero ese fue el culpable.

Tengo el mismo mensaje de error. Me parece muy extraño porque la secuencia de comandos funciona para los archivos xlsx en otra carpeta y los archivos son casi iguales.

Todavía no sé por qué sucedió esto. Pero finalmente, copié todos los archivos de Excel a otra carpeta y el script funcionó. Una opción para probar si ninguna de las sugerencias anteriores funciona para usted …