Läsa Excel filer

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

Du kan importera, parsa och fråga Excel-filer för batch- och strömningsarbetsbelastningar med hjälp av inbyggt Excel-filformatsstöd. Den härleder automatiskt schema- och datatyper, vilket eliminerar behovet av externa bibliotek eller manuella filkonverteringar. Den här funktionen ger sömlös inmatning från både lokala uppladdningar och molnlagring.

Viktiga funktioner

  • Läs .xls och .xlsx filer direkt med Databricks SQL och Spark API:er.
  • Ladda upp .xls och .xlsx filer direkt med hjälp av användargränssnittet lägg till data. Se Skapa eller ändra en tabell med filuppladdning.
  • Läs valfritt blad från en fil med flera blad.
  • Ange exakta cellgränsningar eller intervall.
  • Avled automatiskt schema, rubriker och datatyper.
  • Mata in utvärderade formler.
  • Använd Automatisk inläsning för strukturerad strömning av Excel filer.

Förutsättningar

Databricks Runtime 17.1 eller senare.

Skapa eller ändra en tabell i användargränssnittet

Du kan använda användargränssnittet Skapa eller ändra tabell för att skapa tabeller från Excel filer. Börja med att ladda upp en Excel fil eller välj en Excel fil från en volym eller en extern plats. Välj bladet, justera antalet rubrikrader och ange ett cellområde. Användargränssnittet har stöd för att skapa en enda tabell från den valda filen och bladet.

Hämta Excel-filer

Du kan köra frågor mot dina Excel-filer med Spark-batch (spark.read) och API:er för streaming (spark.readstream). Du kan välja att automatiskt härleda schemat eller ange ett eget schema för att parsa Excel-filerna. Som standard läser parsern alla celler från cellen överst till vänster till cellen längst ned till höger som inte är tom i det första bladet. Om du vill läsa ett annat blad eller cellområde använder du alternativet dataAddress .

Du kan fråga efter listan med blad i en Excel-fil genom att ställa in alternativet operation till listSheets.

Excel parsningsalternativ

Följande alternativ är tillgängliga för att parsa Excel filer:

Alternativ för datakälla Description
dataAddress Adressen till cellområdet som ska läsas i Excel-syntax. Om den inte anges läser parsern alla giltiga celler från det första bladet.
  • "" eller utelämnas: Läser alla data från det första bladet.
  • "MySheet!C5:H10": Läser från intervall C5 till H10 på bladet med namnet MySheet.
  • "C5:H10": Läser omfånget C5 till H10 från det första bladet.
  • "Sheet1!A1:A1": Läser endast cellen A1 från Sheet1.
  • "Sheet1": Läser alla data från Sheet1.
  • "My Sheet!?>!D5:G10": Läser D5 till G10 från My Sheet!?>.
headerRows Antalet inledande rader i Excel-filen som ska behandlas som rubrikrader och läsas som kolumnnamn. När dataAddress anges headerRows gäller för rubrikraderna inom cellområdet. Värden som stöds är 0 och 1. Standardvärdet är 0, i vilket fall kolumnnamn genereras automatiskt genom att lägga till kolumnnumret till _c (till exempel: _c1, _c2, _c3, ...).
Examples:
  • dataAddress: "A2:D5", headerRows: "0": Härleder kolumnnamn som _c1..._c4. Läser den första dataraden från rad 2: A2 till D2.
  • dataAddress: "A2:D5", headerRows: "1": Anger kolumnnamn som cellvärden i rad 2: A2 till D2. Läser den första dataraden från rad 3: A3 till D3.
operation Anger vilken åtgärd som ska utföras på arbetsboken Excel. Standardvärdet är readSheet, som läser data från ett blad. Den andra åtgärden som stöds är listSheets, som returnerar listan över blad i arbetsboken. För åtgärden listSheets är det returnerade schemat ett struct med följande fält:
  • sheetIndex: lång
  • sheetName: Sträng
timestampNTZFormat Anpassad formatsträng för ett tidsstämpelvärde (lagras som en sträng i Excel) utan en tidszon som följer datetime-mönsterformatet. Detta gäller för strängvärden som läses som TimestampNTZType. Förvald: yyyy-MM-dd'T'HH:mm:ss[.SSS].
dateFormat Anpassad datumformatsträng som följer datetime-mönsterformatet. Detta gäller för strängvärden som läses som Date. Förvald: yyyy-MM-dd.

Examples

Hitta kodexempel för att läsa Excel filer med den inbyggda anslutningsappen Lakeflow Connect.

Läsa Excel-filer med hjälp av en Spark batch-läsning

Du kan läsa en Excel fil från molnlagring (till exempel S3, ADLS) med hjälp av spark.read.excel. Till exempel:

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

Läsa Excel filer med SQL

Du kan använda funktionen read_files tabellvärde för att mata in Excel filer direkt med SQL. Till exempel:

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

Strömma Excel-filer med Auto Loader

Du kan strömma Excel filer med automatisk inläsning genom att ange cloudFiles.format till excel. Till exempel:

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

Mata in Excel filer med 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');

Parsa komplexa icke-strukturerade Excel blad

För komplexa, icke-strukturerade Excel blad (till exempel flera tabeller per blad, dataöar) rekommenderar Databricks att du extraherar cellintervallen som du behöver för att skapa dina Spark DataFrames med hjälp av alternativen dataAddress. Till exempel:

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

Lista blad

Du kan lista bladen i en Excel fil med hjälp av åtgärden listSheets. Det returnerade schemat är ett struct med följande fält:

  • sheetIndex: lång
  • sheetName: Sträng

Till exempel:

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

Begränsningar

  • Det går inte att skriva DataFrames till Excel format. Du kan exportera data till andra format som CSV eller Parquet.
  • Lösenordsskyddade filer stöds inte.
  • Endast en rubrikrad stöds.
  • Sammanfogade cellvärden fylls endast i cellen längst upp till vänster. Återstående barnceller ställs in på NULL.
  • Strömma Excel-filer med automatisk inläsning stöds, men schematillväxt stödjs inte. Du måste uttryckligen ange schemaEvolutionMode="None".
  • "Strikt Open XML-kalkylblad (Strikt OOXML)" stöds inte.
  • Makrokörning i .xlsm filer stöds inte.
  • Alternativet ignoreCorruptFiles stöds inte.

Vanliga frågor

Hitta svar på vanliga frågor om Excel-anslutningsappen i Lakeflow Connect.

Kan jag läsa alla blad samtidigt?

Parsern läser bara ett blad från en Excel fil i taget. Som standard läser den det första bladet. Du kan ange ett annat blad med hjälp av dataAddress alternativet . Om du vill bearbeta flera blad hämtar du först listan över blad genom att ange operation alternativet till listSheets, sedan iterera över bladnamnen och läsa var och en genom att ange dess namn i dataAddress alternativet .

Kan jag mata in Excel filer med komplexa layouter eller flera tabeller per blad?

Som standard läser parsern alla Excel celler från den övre vänstra cellen till den nedre högra cellen som inte är tom. Du kan ange ett annat cellområde med hjälp av dataAddress alternativet .

Hur hanteras formler och sammanfogade celler?

Formler matas in som beräknade värden. För sammanslagna celler behålls endast värdet i det övre vänstra hörnet (underordnade celler är NULL).

Kan jag använda Excel-data i Auto Loader och streamingjobb?

Ja, du kan strömma Excel filer med hjälp av cloudFiles.format = "excel". Schemautvecklingen stöds dock inte, så du måste ange "schemaEvolutionMode" till "None".

Kan jag skriva DataFrames till Excel format?

Nej. Den inbyggda Excel-anslutningsappen stöder endast läsning. Om du vill exportera data använder du ett skrivformat som stöds, till exempel CSV eller Parquet.

Stöds lösenordsskyddade Excel-filer?

Nej. Om den här funktionen är viktig för dina arbetsflöden kontaktar du din Databricks-kontorepresentant.