Delen via


Excel-bestanden lezen

Belangrijk

Deze functie bevindt zich in de bètaversie. Werkruimtebeheerders kunnen de toegang tot deze functie beheren vanaf de pagina Previews . Zie Azure Databricks-previews beheren.

U kunt Excel-bestanden opnemen, parseren en er query's op uitvoeren voor batch- en streamingworkloads met behulp van ingebouwde ondersteuning voor Excel-bestandsindelingen. Het bepaalt automatisch het schema en de gegevenstypen, waardoor externe bibliotheken of handmatige bestandsconversies niet meer nodig zijn. Deze functie biedt naadloze opname van zowel lokale uploads als cloudopslag.

Belangrijkste kenmerken

  • Rechtstreeks .xls- en .xlsx-bestanden lezen met Databricks SQL en Spark-API's.
  • Rechtstreeks uploaden .xls en .xlsx bestanden met behulp van de gebruikersinterface Gegevens toevoegen. Zie Bestanden uploaden naar Azure Databricks.
  • Lees een blad uit een bestand met meerdere werkbladen.
  • Geef exacte celgrenzen of -bereiken op.
  • Automatisch schema, headers en gegevenstypen afleiden.
  • Geëvalueerde formules opnemen.
  • Gebruik Automatisch laden voor gestructureerd streamen van Excel-bestanden.

Vereiste voorwaarden

Databricks Runtime 17.1 of hoger.

Een tabel maken of wijzigen in de gebruikersinterface

U kunt de gebruikersinterface voor tabellen maken of wijzigen om tabellen te maken op basis van Excel-bestanden. Begin met het uploaden van een Excel-bestand of het selecteren van een Excel-bestand vanaf een volume of een externe locatie. Kies het blad, pas het aantal koprijen aan en specificeer optioneel een celbereik. De gebruikersinterface ondersteunt het maken van één tabel uit het geselecteerde bestand en blad.

Query's uitvoeren op Excel-bestanden

U kunt query's uitvoeren op uw Excel-bestanden met behulp van Spark-batch-API's (spark.read) en streaming-API'sspark.readstream. U kunt ervoor kiezen om het schema automatisch af te leiden of uw eigen schema op te geven om de Excel-bestanden te parseren. Standaard worden met de parser alle cellen gelezen die beginnen vanaf de cel linksboven naar de niet-lege cel rechtsonder in het eerste blad. Als u een ander blad of celbereik wilt lezen, gebruikt u de dataAddress optie.

U kunt een query uitvoeren op de lijst met bladen in een Excel-bestand door de operation optie in te stellen op listSheets.

Opties voor het parseren van Excel

De volgende opties zijn beschikbaar om Excel-bestanden te parseren:

Optie gegevensbron Description
dataAddress Het adres van het celbereik dat moet worden gelezen in de Excel-syntaxis. Als dit niet is opgegeven, leest de parser alle geldige cellen uit het eerste blad.
  • "" of weggelaten: alle gegevens uit het eerste blad worden gelezen.
  • "MySheet!C5:H10": Leest het bereik van C5 tot H10 uit het blad met de naam MySheet.
  • "C5:H10": Leest bereik C5 tot H10 van het eerste werkblad.
  • "Sheet1!A1:A1": Leest alleen cel A1 uit Sheet1.
  • "Sheet1": leest alle gegevens uit Sheet1.
  • "'My Sheet!?>'!D5:G10": leest van D5 tot G10 van My Sheet!?>. Plaats de bladnaam tussen '.
headerRows Het aantal initiële rijen in het Excel-bestand dat moet worden behandeld als koprijen en als kolomnamen moet worden gelezen. Wanneer dataAddress is opgegeven, geldt headerRows voor de koppenrijen binnen dat celbereik. Ondersteunde waarden zijn 0 en 1. De standaardwaarde is 0, waarbij kolomnamen automatisch worden gegenereerd door het kolomnummer toe te voegen aan _c (bijvoorbeeld: _c1, _c2, _c3, ...).
Examples:
  • dataAddress: "A2:D5", headerRows: "0" leidt de kolomnamen af naar _c1..._c4. Leest de eerste rij met gegevens uit rij 2: A2 naar D2.
  • dataAddress: "A2:D5", headerRows: "1": Hiermee stelt u kolomnamen in als celwaarden in rij 2: A2 tot D2. Leest de eerste rij met gegevens uit rij 3: A3 naar D3.
operation Geeft de bewerking aan die moet worden uitgevoerd in de Excel-werkmap. De standaardwaarde is readSheet, waarmee gegevens uit een blad worden gelezen. De andere ondersteunde bewerking is listSheets, waarmee de lijst met bladen in de werkmap wordt geretourneerd. Voor de listSheets bewerking is het geretourneerde schema een struct met de volgende velden:
  • sheetIndex: lang
  • sheetName: tekenreeks
timestampNTZFormat Aangepaste notatietekenreeks voor een tijdstempelwaarde (opgeslagen als een tekenreeks in Excel) zonder een tijdzone die de datum/tijd-patroonnotatie volgt. Dit geldt voor tekenreekswaarden die worden gelezen als TimestampNTZType. Standaard: yyyy-MM-dd'T'HH:mm:ss[.SSS].
dateFormat Tekenreeks voor aangepaste datumnotatie die de datum/tijd-patroonnotatie volgt. Dit geldt voor tekenreekswaarden die worden gelezen als Date. Standaard: yyyy-MM-dd.

Voorbeelden

Zoek codevoorbeelden voor het lezen van Excel-bestanden met behulp van de ingebouwde connector Lakeflow Connect.

Excel-bestanden lezen met behulp van een Spark-batch

U kunt een Excel-bestand lezen vanuit cloudopslag (bijvoorbeeld S3, ADLS) met behulp van spark.read.excel. Voorbeeld:

# 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>))

Excel-bestanden lezen met SQL

U kunt de read_files tabelwaardefunctie gebruiken om Excel-bestanden rechtstreeks op te nemen met behulp van SQL. Voorbeeld:

-- Read an entire Excel file
CREATE TABLE my_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  schemaEvolutionMode => "none"
);

-- Read a specific sheet and range
CREATE TABLE my_sheet_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  format => "excel",
  headerRows => 1,
  dataAddress => "'Sheet1'!A2:D10",
  schemaEvolutionMode => "none"
);

Excel-bestanden streamen met behulp van automatisch laden

U kunt Excel-bestanden streamen met behulp van automatisch laden door in te stellen cloudFiles.format op excel. Voorbeeld:

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>)

Excel-bestanden opnemen met COPY INTO

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');

Complexe niet-gestructureerde Excel-bladen parseren

Voor complexe, niet-gestructureerde Excel-bladen (bijvoorbeeld meerdere tabellen per blad, gegevenseilanden), raadt Databricks aan om de celbereiken te extraheren die u nodig hebt om uw Spark DataFrames te maken met behulp van de dataAddress opties. Voorbeeld:

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

Lijstbladen

U kunt de bladen in een Excel-bestand weergeven met behulp van de listSheets bewerking. Het geretourneerde schema is een struct met de volgende velden:

  • sheetIndex: lang
  • sheetName: tekenreeks

Voorbeeld:

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>))

SQL

SELECT * FROM read_files("<path to excel directory or file>",
  schemaEvolutionMode => "none",
  operation => "listSheets"
)

Beperkingen

  • Bestanden die met een wachtwoord zijn beveiligd, worden niet ondersteund.
  • Slechts één koprij wordt ondersteund.
  • Samengevoegde celwaarden vullen alleen de bovenste linker cel. Resterende subcellen zijn ingesteld op NULL.
  • Het streamen van Excel-bestanden met automatische laadprogramma's wordt ondersteund, maar de ontwikkeling van schema's is dat niet. U moet schemaEvolutionMode="None" uitdrukkelijk instellen.
  • 'Strict Open XML Spreadsheet (Strict OOXML)' wordt niet ondersteund.
  • Macro-uitvoering in .xlsm bestanden wordt niet ondersteund.
  • De ignoreCorruptFiles optie wordt niet ondersteund.

Veelgestelde vragen

Vind antwoorden op veelgestelde vragen over de Excel-connector in Lakeflow Connect.

Kan ik alle bladen tegelijk lezen?

De parser leest slechts één blad uit een Excel-bestand tegelijk. Standaard wordt het eerste blad gelezen. U kunt een ander blad opgeven met behulp van de dataAddress optie. Als u meerdere bladen wilt verwerken, haalt u eerst de lijst met bladen op door de operation optie in te listSheets stellen, en vervolgens de bladnamen door te lopen en elk blad te lezen door de naam ervan op te geven in de dataAddress optie.

Kan ik Excel-bestanden opnemen met complexe indelingen of meerdere tabellen per vel?

Standaard leest de parser alle Excel-cellen van de cel linksboven tot aan de niet-lege cel rechtsonder. U kunt een ander celbereik opgeven met behulp van de dataAddress optie.

Hoe worden formules en samengevoegde cellen verwerkt?

Formules worden opgenomen als berekende waarden. Voor samengevoegde cellen blijft alleen de waarde linksboven behouden (onderliggende cellen zijn NULL).

Kan ik Excel-opname gebruiken in automatische laad- en streamingtaken?

Ja, u kunt Excel-bestanden streamen met behulp van cloudFiles.format = "excel". Schemaontwikkeling wordt echter niet ondersteund, dus moet u instellen op "schemaEvolutionMode""None".

Wordt Excel met een wachtwoord beveiligd?

Nee. Als deze functionaliteit essentieel is voor uw werkstromen, neemt u contact op met uw Databricks-accountvertegenwoordiger.