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