Je dois lire un fichier .xlsx toutes les 10 minutes en python.
Quelle est la manière la plus efficace de le faire ?
J'ai essayé d'utiliser xlrd, mais il ne lit pas les fichiers .xlsx - selon la documentation, il le fait, mais je ne peux pas le faire - j'obtiens Unsupported format, or corrupt file
exceptions.
Quelle est la meilleure façon de lire les xlsx ?
Je dois aussi lire les commentaires dans les cellules.
Réponses
Trop de publicités?Xlrd n'a pas encore publié la version permettant de lire les xlsx. En attendant, Eric Gazoni a construit un paquet appelé openpyxl - lit les fichiers xlsx, et en fait une écriture limitée.
Utiliser Openpyxl quelques exemples de base :
import openpyxl
# Open Workbook
wb = openpyxl.load_workbook(filename='example.xlsx', data_only=True)
# Get All Sheets
a_sheet_names = wb.get_sheet_names()
print(a_sheet_names)
# Get Sheet Object by names
o_sheet = wb.get_sheet_by_name("Sheet1")
print(o_sheet)
# Get Cell Values
o_cell = o_sheet['A1']
print(o_cell.value)
o_cell = o_sheet.cell(row=2, column=1)
print(o_cell.value)
o_cell = o_sheet['H1']
print(o_cell.value)
# Sheet Maximum filled Rows and columns
print(o_sheet.max_row)
print(o_sheet.max_column)
Il y a plusieurs façons de lire les fichiers au format XLSX à l'aide de python . Deux d'entre eux sont illustrés ci-dessous et nécessitent l'installation d'openpyxl au moins et si vous voulez analyser directement dans pandas, vous devez installer pandas, par exemple. pip install pandas openpyxl
Option 1 : pandas direct
Cas d'utilisation principal : charger uniquement les données pour un traitement ultérieur.
Utilisation de read_excel() dans pandas serait votre meilleur choix. Notez que pandas devrait se rabattre sur openpyxl automatiquement, mais en cas de problèmes de format, il est préférable de spécifier le moteur directement.
df_pd = pd.read_excel("path/file_name.xlsx", engine="openpyxl")
Option 2 - openpyxl direct
Cas d'utilisation principal : obtenir ou modifier des éléments spécifiques de documents Excel tels que des commentaires (demandés par OP), des propriétés de formatage ou des formules.
Utilisation de load_workbook() suivi de l'extraction des commentaires en utilisant le attribut de commentaire pour chaque cellule serait obtenue de la manière suivante.
from openpyxl import load_workbook
wb = load_workbook(filename = "path/file_name.xlsx")
ws = wb.active
ws["A1"].comment # <- loop through row & columns to extract all comments