如何在Lua中读取和解析Excel文件?

我想要读取一个 xls 文件并进行解析,如何使用 Lua 实现?谢谢。

点赞
用户1208078
用户1208078

这不是重复的问题,因为他只是想从 Excel 文件中读取并解析数据,而不是操作 Excel 对象。

每当我需要这样做时,我会使用 luasql 使用 ADO。最基本的级别上,如果您知道查询中每行将有多少个字段,则可以使用以下代码来打开数据库连接并从中读取 Excel 数据。

function rows(connection, sql_stmt)
    local cursor = assert(connection:execute(sql_stmt))
    return function()
        return cursor:fetch()
    end
end

local fpath = "path/to/file.xlxs"
local constr = "Provider=Microsoft.ACE.OLEDB.12.0;"..
               "Data Source=\""..fpath.."\";"..
               "Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

local env = assert(luasql.ado())
local con = assert(env:connect(constr))

-- 工作表名称需要用括号括起来,并以 $ 结尾。
local query = "SELECT * FROM \[name_of_worksheet$\]"

-- 如果您确切知道返回的字段数量,可以使用以下方法。
for field1, field2, field3, ... in rows(con, query) do
    -- 在此处处理从行中解析的任何数据。
end

con:close()
env:close()

如果您不知道返回的字段数量,可以使用以下方法:

local fpath = "path/to/file.xlxs"
local constr = "Provider=Microsoft.ACE.OLEDB.12.0;"..
               "Data Source=\""..fpath.."\";"..
               "Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

local env = assert(luasql.ado())
local con = assert(env:connect(constr))

-- 工作表名称需要用括号括起来,并以 $ 结尾。
local query = "SELECT * FROM \[name_of_worksheet$\]"

-- 如果您不知道每行可能返回多少个字段,可以使用以下方法迭代每行。
local cursor = con:execute(query)
local t = {}
local results = cursor:fetch(t)

while results ~= nil do
    for k,v in pairs(results) do
        -- 在此处检查行中的每个字段。
    end
    results = con:fetch(t)
end

cursor:close()
con:close()
env:close()

使用完毕后记得关闭游标、连接和环境。另外,您需要验证上面的连接字符串是否适用于您的 Excel 版本。确定需要哪个连接字符串最简单的方法是访问 www.connectionstrings.com 并浏览查找正确的连接字符串。

2012-06-21 14:20:18