Таблицы Excel
Таблицы Excel
Заголовок раздела «Таблицы Excel»Чтение и запись файлов Microsoft Excel (.xlsx). Создание книг, управление листами, чтение значений ячеек и генерация отчётов с поддержкой форматирования.
Загрузка
Заголовок раздела «Загрузка»local excel = require("excel")Создание книг
Заголовок раздела «Создание книг»Новая книга
Заголовок раздела «Новая книга»Создаёт новую пустую книгу Excel.
local wb, err = excel.new()if err then return nil, errend
-- Создание листов и добавление данныхwb:new_sheet("Report")wb:set_cell_value("Report", "A1", "Title")
wb:close()Возвращает: Workbook, error
Открытие книги
Заголовок раздела «Открытие книги»Открывает книгу Excel из объекта-читателя.
local fs = require("fs")
local vol, err = fs.get("app:data")if err then return nil, errend
local file, err = vol:open("/reports/sales.xlsx", "r")if err then return nil, errend
local wb, err = excel.open(file)if err then file:close() return nil, errend
-- Чтение данных из книгиlocal rows = wb:get_rows("Sheet1")for i, row in ipairs(rows) do print("Row " .. i .. ": " .. table.concat(row, ", "))end
wb:close()file:close()| Параметр | Тип | Описание |
|---|---|---|
reader | File | Должен реализовывать io.Reader (например, fs.File) |
Возвращает: Workbook, error
Операции с листами
Заголовок раздела «Операции с листами»Создание листа
Заголовок раздела «Создание листа»Создаёт новый лист или возвращает индекс существующего.
local wb = excel.new()
-- Создание листовlocal idx1 = wb:new_sheet("Summary")local idx2 = wb:new_sheet("Details")local idx3 = wb:new_sheet("Charts")
-- Если лист существует, возвращается его индексlocal existing = wb:new_sheet("Summary") -- возвращает то же, что idx1| Параметр | Тип | Описание |
|---|---|---|
name | string | Имя листа |
Возвращает: integer, error
Список листов
Заголовок раздела «Список листов»Возвращает список всех имён листов в книге.
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Возвращает: string[], error
Операции с ячейками
Заголовок раздела «Операции с ячейками»Установка значения ячейки
Заголовок раздела «Установка значения ячейки»Устанавливает значение одной ячейки.
local wb = excel.new()wb:new_sheet("Data")
-- Установка разных типов значенийwb:set_cell_value("Data", "A1", "Product Name") -- строкаwb:set_cell_value("Data", "B1", "Price") -- строкаwb:set_cell_value("Data", "C1", "In Stock") -- строка
wb:set_cell_value("Data", "A2", "Widget")wb:set_cell_value("Data", "B2", 29.99) -- числоwb:set_cell_value("Data", "C2", true) -- булево
wb:set_cell_value("Data", "A3", "Gadget")wb:set_cell_value("Data", "B3", 49.99)wb:set_cell_value("Data", "C3", false)
-- Ссылки на ячейки поддерживают столбцы дальше Zwb:set_cell_value("Data", "AA1", "Extended Column")wb:set_cell_value("Data", "AB100", "Far cell")| Параметр | Тип | Описание |
|---|---|---|
sheet | string | Имя листа |
cell | string | Ссылка на ячейку (“A1”, “B2”, “AA100”) |
value | any | string, integer, number или boolean |
Возвращает: error
Получение всех строк
Заголовок раздела «Получение всех строк»Получает все строки листа в виде двумерного массива.
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, errend
-- 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]) endend| Параметр | Тип | Описание |
|---|---|---|
sheet | string | Имя листа |
Возвращает: string[][], error
Все значения ячеек возвращаются как строки. Булевы значения как “TRUE” или “FALSE”, числа как строковое представление.
Файловые операции
Заголовок раздела «Файловые операции»Запись в файл
Заголовок раздела «Запись в файл»Записывает книгу в объект-писатель.
local fs = require("fs")local wb = excel.new()
-- Формирование отчёта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)
-- Запись в файлlocal vol, err = fs.get("app:output")if err then wb:close() return nil, errend
local file, err = vol:open("/reports/monthly.xlsx", "w")if err then wb:close() return nil, errend
local err = wb:write_to(file)file:close()wb:close()
if err then return nil, errend| Параметр | Тип | Описание |
|---|---|---|
writer | File | Должен реализовывать io.Writer (например, fs.File) |
Возвращает: error
Закрытие книги
Заголовок раздела «Закрытие книги»Закрывает книгу и освобождает ресурсы.
local wb = excel.new()-- ... работа с книгой ...wb:close()
-- Безопасно вызывать несколько разwb:close()Возвращает: error
| Условие | Kind | Повторяемо |
|---|---|---|
| Нет контекста | errors.INTERNAL | нет |
| Некорректная книга | errors.INVALID | нет |
| Книга закрыта | errors.INTERNAL | нет |
| Не reader/writer | errors.INTERNAL | нет |
| Некорректный Excel-файл | errors.INTERNAL | нет |
| Несуществующий лист | errors.INTERNAL | нет |
| Некорректная ссылка на ячейку | errors.INTERNAL | нет |
| Ошибка записи | errors.INTERNAL | нет |
См. Обработка ошибок для работы с ошибками.
См. также
Заголовок раздела «См. также»- Файловая система — файловые операции для чтения/записи Excel-файлов