60 lines
1.4 KiB
Lua
60 lines
1.4 KiB
Lua
local _ENV = mkmodule('plugins.xlsxreader')
|
|
|
|
XlsxioSheetReader = defclass(XlsxioSheetReader, nil)
|
|
XlsxioSheetReader.ATTRS{
|
|
-- handle to the open sheet. required.
|
|
sheet_handle = DEFAULT_NIL,
|
|
}
|
|
|
|
function XlsxioSheetReader:init()
|
|
if not self.sheet_handle then
|
|
error('XlsxSheetReader: sheet_handle is required')
|
|
end
|
|
end
|
|
|
|
function XlsxioSheetReader:close()
|
|
close_sheet(self.sheet_handle)
|
|
self.sheet_handle = nil
|
|
end
|
|
|
|
function XlsxioSheetReader:get_row(max_tokens)
|
|
return get_row(self.sheet_handle, max_tokens)
|
|
end
|
|
|
|
XlsxioReader = defclass(XlsxioReader, nil)
|
|
XlsxioReader.ATTRS{
|
|
-- full or relative path to the target .xlsx file. required.
|
|
filepath = DEFAULT_NIL,
|
|
}
|
|
|
|
function open(filepath)
|
|
return XlsxioReader{filepath=filepath}
|
|
end
|
|
|
|
function XlsxioReader:init()
|
|
if not self.filepath then
|
|
error('XlsxReader: filepath is required')
|
|
end
|
|
self.xlsx_handle = open_xlsx_file(self.filepath)
|
|
if not self.xlsx_handle then
|
|
qerror(('failed to open "%s"'):format(self.filepath))
|
|
end
|
|
end
|
|
|
|
function XlsxioReader:close()
|
|
close_xlsx_file(self.xlsx_handle)
|
|
self.xlsx_handle = nil
|
|
end
|
|
|
|
function XlsxioReader:list_sheets()
|
|
return list_sheets(self.xlsx_handle)
|
|
end
|
|
|
|
-- if sheet_name is empty or nil, opens the first sheet
|
|
function XlsxioReader:open_sheet(sheet_name)
|
|
local sheet_handle = open_sheet(self.xlsx_handle, sheet_name)
|
|
return XlsxioSheetReader{sheet_handle=sheet_handle}
|
|
end
|
|
|
|
return _ENV
|