Excel-Tabellen

Lesen und schreiben Sie Microsoft Excel-Dateien (.xlsx). Erstellen Sie Arbeitsmappen, verwalten Sie Tabellenblätter, lesen Sie Zellwerte und generieren Sie Berichte mit Formatierungsunterstützung.

Laden

local excel = require("excel")

Arbeitsmappen erstellen

Neue Arbeitsmappe

Erstellt eine neue leere Excel-Arbeitsmappe.

local wb, err = excel.new()
if err then
    return nil, err
end

-- Tabellenblätter erstellen und Daten hinzufügen
wb:new_sheet("Report")
wb:set_cell_value("Report", "A1", "Title")

wb:close()

Gibt zurück: Workbook, error

Arbeitsmappe öffnen

Öffnet eine Excel-Arbeitsmappe von einem Reader-Objekt.

local fs = require("fs")

local vol, err = fs.get("app:data")
if err then
    return nil, err
end

local file, err = vol:open("/reports/sales.xlsx", "r")
if err then
    return nil, err
end

local wb, err = excel.open(file)
if err then
    file:close()
    return nil, err
end

-- Daten aus Arbeitsmappe lesen
local rows = wb:get_rows("Sheet1")
for i, row in ipairs(rows) do
    print("Row " .. i .. ": " .. table.concat(row, ", "))
end

wb:close()
file:close()
Parameter Typ Beschreibung
reader File Muss io.Reader implementieren (z.B. fs.File)

Gibt zurück: Workbook, error

Tabellenblatt-Operationen

Tabellenblatt erstellen

Erstellt ein neues Tabellenblatt oder gibt den Index eines existierenden zurück.

local wb = excel.new()

-- Tabellenblätter erstellen
local idx1 = wb:new_sheet("Summary")
local idx2 = wb:new_sheet("Details")
local idx3 = wb:new_sheet("Charts")

-- Wenn Tabellenblatt existiert, gibt seinen Index zurück
local existing = wb:new_sheet("Summary")  -- gibt gleichen Wert wie idx1 zurück
Parameter Typ Beschreibung
name string Tabellenblattname

Gibt zurück: integer, error

Tabellenblätter auflisten

Gibt Liste aller Tabellenblattnamen in der Arbeitsmappe zurück.

local wb = excel.new()
wb:new_sheet("Sales")
wb:new_sheet("Expenses")
wb:new_sheet("Summary")

local sheets = wb:get_sheet_list()
-- sheets = {"Sheet1", "Sales", "Expenses", "Summary"}

for _, name in ipairs(sheets) do
    print("Sheet:", name)
end

Gibt zurück: string[], error

Zellen-Operationen

Zellwert setzen

Setzt den Wert einer einzelnen Zelle.

local wb = excel.new()
wb:new_sheet("Data")

-- Verschiedene Werttypen setzen
wb:set_cell_value("Data", "A1", "Product Name")  -- string
wb:set_cell_value("Data", "B1", "Price")         -- string
wb:set_cell_value("Data", "C1", "In Stock")      -- string

wb:set_cell_value("Data", "A2", "Widget")
wb:set_cell_value("Data", "B2", 29.99)           -- number
wb:set_cell_value("Data", "C2", true)            -- boolean

wb:set_cell_value("Data", "A3", "Gadget")
wb:set_cell_value("Data", "B3", 49.99)
wb:set_cell_value("Data", "C3", false)

-- Zellreferenzen unterstützen Spalten über Z hinaus
wb:set_cell_value("Data", "AA1", "Extended Column")
wb:set_cell_value("Data", "AB100", "Far cell")
Parameter Typ Beschreibung
sheet string Tabellenblattname
cell string Zellreferenz ("A1", "B2", "AA100")
value any string, integer, number oder boolean

Gibt zurück: error

Alle Zeilen abrufen

Holt alle Zeilen von einem Tabellenblatt als 2D-Array.

local wb = excel.new()
wb:new_sheet("Report")
wb:set_cell_value("Report", "A1", "Name")
wb:set_cell_value("Report", "B1", "Score")
wb:set_cell_value("Report", "A2", "Alice")
wb:set_cell_value("Report", "B2", 95)
wb:set_cell_value("Report", "A3", "Bob")
wb:set_cell_value("Report", "B3", 87)

local rows, err = wb:get_rows("Report")
if err then
    return nil, err
end

-- rows[1] = {"Name", "Score"}
-- rows[2] = {"Alice", "95"}
-- rows[3] = {"Bob", "87"}

for i, row in ipairs(rows) do
    if i == 1 then
        print("Headers:", row[1], row[2])
    else
        print("Data:", row[1], "scored", row[2])
    end
end
Parameter Typ Beschreibung
sheet string Tabellenblattname

Gibt zurück: string[][], error

Alle Zellwerte werden als Strings zurückgegeben. Booleans als "TRUE" oder "FALSE", Zahlen als String-Darstellung.

Zeilen streamen

wb:rows(sheet) öffnet einen streamenden Cursor über ein Tabellenblatt. Das Blatt wird inkrementell mit konstantem Speicher dekodiert, anders als get_rows, das das gesamte Blatt materialisiert:

local cursor, err = wb:rows("Report")
if err then
    return nil, err
end

while true do
    local batch, err = cursor:read(500)
    if err then
        cursor:close()
        return nil, err
    end
    if not batch then
        break                       -- end of sheet
    end
    for _, row in ipairs(batch) do
        process(row)
    end
end
cursor:close()
Methode Beschreibung
cursor:read(n?) Den nächsten Batch von bis zu n Zeilen lesen (Standard 1, max 10000). Gibt string[][], error zurück; nil, nil am Blattende
cursor:close() Cursor freigeben (idempotent; Cursor schließen auch mit der Arbeitsmappe)

Zellwerte werden identisch zu get_rows formatiert. Leere Zeilen kommen als leere Tabellen zurück, und abschließende leere Zeilen bleiben erhalten statt abgeschnitten zu werden. Nach dem Blattende oder einem Fehler geben nachfolgende Reads weiterhin denselben Zustand zurück.

Datei-Operationen

In Datei schreiben

Schreibt Arbeitsmappe in ein Writer-Objekt.

local fs = require("fs")
local wb = excel.new()

-- Bericht erstellen
wb:new_sheet("Monthly Report")
wb:set_cell_value("Monthly Report", "A1", "Month")
wb:set_cell_value("Monthly Report", "B1", "Revenue")
wb:set_cell_value("Monthly Report", "A2", "January")
wb:set_cell_value("Monthly Report", "B2", 45000)
wb:set_cell_value("Monthly Report", "A3", "February")
wb:set_cell_value("Monthly Report", "B3", 52000)

-- In Datei schreiben
local vol, err = fs.get("app:output")
if err then
    wb:close()
    return nil, err
end

local file, err = vol:open("/reports/monthly.xlsx", "w")
if err then
    wb:close()
    return nil, err
end

local err = wb:write_to(file)
file:close()
wb:close()

if err then
    return nil, err
end
Parameter Typ Beschreibung
writer File Muss io.Writer implementieren (z.B. fs.File)

Gibt zurück: error

Arbeitsmappe schließen

Schließt Arbeitsmappe und gibt Ressourcen frei.

local wb = excel.new()
-- ... mit Arbeitsmappe arbeiten ...
wb:close()

-- Sicher mehrfach aufzurufen
wb:close()

Gibt zurück: error

Fehler

Bedingung Art Wiederholbar
Kein Kontext errors.INTERNAL nein
Ungültige Arbeitsmappe errors.INVALID nein
Arbeitsmappe geschlossen errors.INTERNAL nein
Kein Reader/Writer errors.INTERNAL nein
Ungültige Excel-Datei errors.INTERNAL nein
Nicht existierendes Tabellenblatt errors.INTERNAL nein
Ungültige Zellreferenz errors.INTERNAL nein
Schreiben fehlgeschlagen errors.INTERNAL nein

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.

Siehe auch

  • Dateisystem - Dateioperationen zum Lesen/Schreiben von Excel-Dateien