Dela via


Läsa Excel-filer

Viktigt!

Den här funktionen finns i Beta. Arbetsyteadministratörer kan styra åtkomsten till den här funktionen från sidan Förhandsversioner . Se Hantera förhandsversioner av Azure Databricks.

Du kan läsa in, parsa och fråga Excel-filer för både batch- och strömmande arbetsbelastningar med hjälp av inbyggt stöd för Excel-filformat. 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 Ladda upp filer till Azure Databricks.
  • 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 Auto Loader för strukturerad direktuppspelning 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älja 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.

Sök i Excel-filer

Du kan fråga dina Excel-filer med Spark batch-API:er (spark.read) och streaming-API:er 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 hämta listan med blad i en Excel-fil genom att ange operation alternativet 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!?>. Omslut bladnamnet med '.
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å Excel-arbetsboken. 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 hjälp av den inbyggda anslutningsappen Lakeflow Connect.

Läsa Excel-filer genom Spark-batchlä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 table-valued för att mata in Excel-filer direkt med HJÄLP av 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 hjälp av 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 ark, dataöar) rekommenderar Databricks att du extraherar de cellområden som du behöver för att skapa dina Spark DataFrames med hjälp av dataAddress alternativen. 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

  • 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.
  • Direktuppspelning av Excel-filer med automatisk inläsning stöds, men inte schemautveckling. 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-inmatning i autoinläsnings- och strömningsjobb?

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

Stöds lösenordsskyddad Excel?

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