Hojas de Calculo Excel

Leer y escribir archivos Microsoft Excel (.xlsx). Crear libros de trabajo, gestionar hojas, leer valores de celdas y generar reportes con soporte de formato.

Carga

local excel = require("excel")

Crear Libros de Trabajo

Nuevo Libro de Trabajo

Crea un nuevo libro de trabajo Excel vacio.

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

-- Crear hojas y agregar datos
wb:new_sheet("Report")
wb:set_cell_value("Report", "A1", "Title")

wb:close()

Devuelve: Workbook, error

Abrir Libro de Trabajo

Abre un libro de trabajo Excel desde un objeto reader.

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

-- Leer datos del libro de trabajo
local rows = wb:get_rows("Sheet1")
for i, row in ipairs(rows) do
    print("Row " .. i .. ": " .. table.concat(row, ", "))
end

wb:close()
file:close()
Parámetro Tipo Descripción
reader File Debe implementar io.Reader (ej., fs.File)

Devuelve: Workbook, error

Operaciones de Hoja

Crear Hoja

Crea una nueva hoja o devuelve indice de hoja existente.

local wb = excel.new()

-- Crear hojas
local idx1 = wb:new_sheet("Summary")
local idx2 = wb:new_sheet("Details")
local idx3 = wb:new_sheet("Charts")

-- Si la hoja existe, devuelve su indice
local existing = wb:new_sheet("Summary")  -- devuelve igual que idx1
Parámetro Tipo Descripción
name string Nombre de hoja

Devuelve: integer, error

Listar Hojas

Devuelve lista de todos los nombres de hojas en el libro de trabajo.

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

Devuelve: string[], error

Operaciones de Celda

Establecer Valor de Celda

Establece el valor de una celda individual.

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

-- Establecer diferentes tipos de valor
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)           -- número
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)

-- Referencias de celda soportan columnas mas alla de Z
wb:set_cell_value("Data", "AA1", "Extended Column")
wb:set_cell_value("Data", "AB100", "Far cell")
Parámetro Tipo Descripción
sheet string Nombre de hoja
cell string Referencia de celda ("A1", "B2", "AA100")
value any string, integer, number o boolean

Devuelve: error

Obtener Todas las Filas

Obtiene todas las filas de una hoja como array 2D.

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
Parámetro Tipo Descripción
sheet string Nombre de hoja

Devuelve: string[][], error

Todos los valores de celda se devuelven como strings. Booleanos como "TRUE" o "FALSE", numeros como representacion string.

Operaciones de Archivo

Escribir a Archivo

Escribe libro de trabajo a un objeto writer.

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

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

-- Escribir a archivo
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
Parámetro Tipo Descripción
writer File Debe implementar io.Writer (ej., fs.File)

Devuelve: error

Cerrar Libro de Trabajo

Cierra libro de trabajo y libera recursos.

local wb = excel.new()
-- ... trabajar con libro de trabajo ...
wb:close()

-- Seguro llamar multiples veces
wb:close()

Devuelve: error

Errores

Condición Tipo Reintentable
Sin contexto errors.INTERNAL no
Libro de trabajo invalido errors.INVALID no
Libro de trabajo cerrado errors.INTERNAL no
No es un reader/writer errors.INTERNAL no
Archivo Excel invalido errors.INTERNAL no
Hoja no existente errors.INTERNAL no
Referencia de celda invalida errors.INTERNAL no
Escritura fallida errors.INTERNAL no

Consulte Manejo de Errores para trabajar con errores.

Vea También