Aller au contenu principal

Lire et Stream des fichiers Excel

Databricks inclut la prise en charge intégrée de la lecture des fichiers .xls et .xlsx, éliminant le besoin de bibliothèques externes ou de conversions de fichiers manuelles. Vous pouvez lire n'importe quelle feuille d'un classeur à plusieurs feuilles, cibler des plages de cellules spécifiques, déduire automatiquement les schémas et les types de données, et travailler avec les valeurs de formule comme résultats calculés. Les fichiers Excel peuvent être lus à partir du stockage cloud ou téléchargés directement dans l’interface utilisateur Ajouter des données , et prennent en charge les charges de travail batch et streaming à l’aide d’Auto Loader.

Prérequis

La lecture et le streaming de fichiers Excel nécessitent Databricks Runtime 17.1 ou une version ultérieure et Auto Loader pour les workloads de streaming.

Options

Utilisez les méthodes .option() et .options() de DataFrameReader pour configurer les sources de données Excel. Pour une liste complète des options prises en charge, consultez les optionsDataFrameReader Excel et les optionsDataFrameWriter Excel.

Utilisation

Les exemples suivants illustrent la lecture de fichiers Excel à l'aide des APIs Spark batch (spark.read) et streaming. Par default, l'analyseur lit toutes les cellules de la cellule non vide en haut à gauche à la cellule non vide en bas à droite dans la première feuille ; utilisez l'option dataAddress pour cibler une feuille ou une plage de cellules spécifique. Le schéma est inféré automatiquement, ou vous pouvez spécifier le vôtre.

Créer ou modifier une table dans l'interface utilisateur

Vous pouvez utiliser l'interface utilisateur **Créer ou modifier une table** pour créer des tables à partir de fichiers Excel. Start by uploading an Excel file ou sélectionner un fichier Excel à partir d'un volume ou d'un emplacement externe. Choisissez la feuille, ajustez le nombre de lignes d'en-tête et spécifiez éventuellement une plage de cellules. L'interface utilisateur prend en charge la création d'une seule table à partir du fichier et de la feuille sélectionnés.

Lire les fichiers Excel

Vous pouvez lire un fichier Excel à partir du stockage cloud (par exemple, S3, ADLS) en utilisant spark.read.excel ou la fonction read_files de SQL.

Python
# Read the first sheet from a single Excel file or from multiple Excel files in a directory
df = (spark.read.excel(<path to excel directory or file>))

# Infer schema field name from the header row
df = (spark.read
.option("headerRows", 1)
.excel(<path to excel directory or file>))

# Read a specific sheet and range
df = (spark.read
.option("headerRows", 1)
.option("dataAddress", "Sheet1!A1:E10")
.excel(<path to excel directory or file>))

Stream Excel files à l'aide d'Auto Loader

Vous pouvez Stream des fichiers Excel à l'aide d'Auto Loader en définissant cloudFiles.format sur excel. Par exemple :

Python
df = (
spark
.readStream
.format("cloudFiles")
.option("cloudFiles.format", "excel")
.option("cloudFiles.inferColumnTypes", True)
.option("headerRows", 1)
.option("cloudFiles.schemaLocation", "<path to schema location dir>")
.option("cloudFiles.schemaEvolutionMode", "none")
.load(<path to excel directory or file>)
)
df.writeStream
.format("delta")
.option("mergeSchema", "true")
.option("checkpointLocation", "<path to checkpoint location dir>")
.table(<table name>)

Ingérer des fichiers Excel en utilisant COPY INTO

Utilisez COPY INTO pour charger des fichiers Excel depuis le stockage cloud dans une table Delta de manière idempotente.

SQL
CREATE TABLE IF NOT EXISTS excel_demo_table;

COPY INTO excel_demo_table
FROM "<path to excel directory or file>"
FILEFORMAT = EXCEL
FORMAT_OPTIONS ('mergeSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');

Lister les feuilles

Vous pouvez lister les feuilles dans un fichier Excel à l'aide de l'opération listSheets. Le schéma renvoyé est un struct avec les champs suivants :

  • sheetIndex: long
  • sheetName: chaîne

Par exemple :

Python
# List the name of the Sheets in an Excel file
df = (spark.read.format("excel")
.option("operation", "listSheets")
.load(<path to excel directory or file>))

Analyser les feuilles Excel complexes non structurées

Pour les feuilles Excel complexes et non structurées (par exemple, plusieurs tableaux par feuille, îles de données), Databricks vous recommande d'extraire les plages de cellules dont vous avez besoin pour créer vos Spark DataFrames en utilisant les options dataAddress.

Python
df = (spark.read.format("excel")
.option("headerRows", 1)
.option("dataAddress", "Sheet1!A1:E10")
.load(<path to excel directory or file>))

Limitations

  • Les fichiers protégés par mot de passe ne sont pas pris en charge.
  • Une seule ligne d'en-tête est prise en charge.
  • Les valeurs des cellules Merge fusionnées ne remplissent que la cellule supérieure gauche. Les cellules enfant restantes sont définies sur NULL.
  • Le streaming de fichiers Excel à l'aide d'Auto Loader est pris en charge, mais l'évolution des schémas ne l'est pas. Vous devez définir explicitement schemaEvolutionMode="None".
  • "Strict Open XML Spreadsheet (Strict OOXML)" n'est pas pris en charge.
  • L'exécution de macros dans les fichiers .xlsm n'est pas prise en charge.
  • L'option ignoreCorruptFiles n'est pas prise en charge.

FAQ

Trouvez des réponses aux questions fréquemment posées sur le connecteur Excel dans Lakeflow Connect.

Puis-je lire toutes les feuilles en une seule fois ?

L'analyseur lit une seule feuille d'un fichier Excel à la fois. By default, il lit la première feuille. Vous pouvez spécifier une feuille différente en utilisant l'option dataAddress. Pour traiter plusieurs feuilles, récupérez d'abord la liste des feuilles en définissant l'option operation sur listSheets, puis itérez sur les noms de feuilles et lisez chacune d'elles en fournissant son nom dans l'option dataAddress.

Puis-je ingérer des fichiers Excel avec des Layouts complexes ou plusieurs tables par feuille ?

Par default, l'analyseur lit toutes les cellules Excel de la cellule supérieure gauche à la cellule inférieure droite non vide. Vous pouvez spécifier une plage de cellules différente à l'aide de l'option dataAddress.

Comment les formules et les cellules Merge sont-elles gérées ?

Les formules sont ingérées en tant que leurs valeurs calculées. Pour les cellules fusionnées, seule la valeur en haut à gauche est conservée (les cellules enfants sont NULL).

Puis-je utiliser l'ingestion Excel dans Auto Loader et les Jobs de streaming ?

Oui, vous pouvez Stream des fichiers Excel à l'aide de cloudFiles.format = "excel". Cependant, l'évolution des schémas n'est pas prise en charge, vous devez donc définir "schemaEvolutionMode" sur "None".

Les fichiers Excel protégés par mot de passe sont-ils pris en charge ?

Non. Si cette fonctionnalité est essentielle à vos workflows, contactez votre interlocuteur commercial Databricks.

Ressources supplémentaires

  • Lire et écrire des fichiers CSV: Si votre source de données peut exporter au format CSV, CSV est un format plus simple avec une prise en charge d'outils plus large et sans dépendance vis-à-vis d'un analyseur dédié.