J'essaie d'ouvrir un fichier xlsx et d'en imprimer le contenu. Je continue à rencontrer cette erreur:
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
Il affiche cette erreur
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'
Merci
Le message d'erreur concerne l'enregistrement BOF (début de fichier) d'un fichier XLS. Cependant, l'exemple montre que vous essayez de lire un fichier XLSX.
Il y a 2 raisons possibles à cela:
Vérifiez que vous utilisez bien une version récente de xlrd. L'ouverture d'un nouveau fichier XLSX avec des données dans une seule cellule devrait le vérifier.
Cependant, je suppose que vous rencontrez la deuxième condition et que le fichier est crypté puisque vous déclarez ci-dessus que vous utilisez déjà xlrd version 0.9.2.
Les fichiers XLSX sont chiffrés si vous appliquez explicitement un mot de passe de classeur mais également si vous protégez par mot de passe certains éléments de la feuille de calcul. En tant que tel, il est possible d'avoir un fichier XLSX crypté même si vous n'avez pas besoin d'un mot de passe pour l'ouvrir.
pdate: Voir @ BStew's, troisième, plus probable, réponse, que le fichier est ouvert par Excel.
Il y a aussi une troisième raison. Le cas où le fichier est déjà ouvert par Excel. Il génère la même erreur.
Et peut-être la quatrième raison, vous avez utilisé read_Excel pour lire un fichier csv. (Ce n'est pas ce qui m'est arrivé ...)
Vous pouvez obtenir cette erreur lorsque le fichier xlsx est en fait html; vous pouvez l'ouvrir avec un éditeur de texte pour le vérifier. Quand j'ai eu cette erreur, je l'ai résolue en utilisant des pandas:
import pandas as pd
df_list = pd.read_html('filename.xlsx')
df = pd.DataFrame(df_list[0])
Dans mon cas, le problème était lié au dossier partagé lui-même.
CASE IN POINT: J'ai un dossier partagé sur le serveur WIN2012 où l'utilisateur dépose le fichier .xlsx puis utilise mon script python pour charger ce fichier xlsx dans une table de base de données.
Même si l'utilisateur a supprimé l'ancien fichier et a mis le fichier à charger, l'erreur BOF a continué à mentionner une chaîne d'octets et le nom de l'utilisateur dans la chaîne d'octets - nulle part à l'intérieur du fichier xlsx dans n'importe quelle feuille de calcul y avait-il le nom de l'utilisateur. De plus, lorsque j'ai copié le .xlsx dans un dossier nouvellement créé et exécuté le script référençant ce nouveau dossier, cela a fonctionné.
Donc, à la fin, j'ai supprimé le dossier partagé et j'ai réalisé que 5 éléments avaient été supprimés même si un seul élément était visible pour moi et l'utilisateur. Je pense que c'est dû à mon manque de compétences en administration Windows, mais c'était le coupable.
J'ai reçu le même message d'erreur. Cela me semble tellement bizarre car le script fonctionne pour les fichiers xlsx sous un autre dossier et les fichiers sont presque les mêmes.
Je ne sais toujours pas pourquoi cela s'est produit. Mais finalement, j'ai copié tous les fichiers Excel dans un autre dossier et le script a fonctionné. Une option à essayer si aucune des suggestions ci-dessus ne vous convient ...