作者在 2026-06-18 21:20:38 发布以下内容
因为要在Windows下用lua读xlsx表,找不到合适的,所以写个模块来用。
我用的是lua5.1,这个模块依赖zip和luaxml,都是lua for windows 5.1自带的。
open(xlsx文件名) 成功返回getCell/close函数,如出错,返回nil和出错信息
getCell(Sheet名, 单元格坐标) 成功返回单元格的值,不成功返回nil和出错信息
close() 关闭打开的xlsx文件
n2Time(数字) 将getCell取得的数字转换成年月日时分秒字符串,只支持1970年以后的日期
nextRow(单元格坐标,偏移量) 取下N行的坐标,偏移量可以为负,当前坐标不合法返回nil
nextCol(单元格坐标,偏移量) 取下N列的坐标,偏移量可以为负,当前坐标不合法返回nil
具体使用方法请看demo
---------------------------------------------------
我用的是lua5.1,这个模块依赖zip和luaxml,都是lua for windows 5.1自带的。
open(xlsx文件名) 成功返回getCell/close函数,如出错,返回nil和出错信息
getCell(Sheet名, 单元格坐标) 成功返回单元格的值,不成功返回nil和出错信息
close() 关闭打开的xlsx文件
n2Time(数字) 将getCell取得的数字转换成年月日时分秒字符串,只支持1970年以后的日期
nextRow(单元格坐标,偏移量) 取下N行的坐标,偏移量可以为负,当前坐标不合法返回nil
nextCol(单元格坐标,偏移量) 取下N列的坐标,偏移量可以为负,当前坐标不合法返回nil
具体使用方法请看demo
---------------------------------------------------
require('xlsxReader')
require('lc') --ANSI/UTF-8/UNICODE编码转换库,因为Windows下xlsx中汉字用utf-8储存
local f, err = xlsxReader.open('demo.xlsx') --打开XLSX文件
if f then
x = f.getCell('Sheet1', 'A1') --Sheet名大小写敏感
print(x)
s = lc.a2u('表2'):sub(1, -2) --lc库有个问题,转换出的字符串结尾会多一个0x00,一般没什么问题,但在这里做Sheet名时会出错,去掉
x = f.getCell(s, 'B2') --取表2的B2格
print((lc.u2a(x)))
x = f.getCell('Sheet1', 'b2') --取Sheet1的B2格
print(xlsxReader.n2Time(x))
x = f.getCell('Sheet1', xlsxReader.nextRow('A10', -1)) --取Sheet1的A10格的上一行
print(x)
x = f.getCell('Sheet1', xlsxReader.nextCol('A1', 1)) --取Sheet1的A1格的下一列
print((lc.u2a(x)))
f.close()
else
print(err)
end
xlsxReader.zip (62.51 KB)