2

xlsファイルを読み取って解析したいと思います。Luaでどうすればいいですか?ありがとう。

4

1 に答える 1

2

彼は実際にはExcelファイルから読み取り、データを解析したいだけなので、これは重複ではありません。Excelオブジェクトを操作するのではありません。

これを行う必要があるときはいつでも、 ADOを使用してluasqlを使用しました。最も基本的なレベルでは、このようなものは、クエリの各行にいくつのフィールドが含まれるかがわかっている場合に、db接続を開いて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))

-- the name of the worksheet needs to be surrounded by brackets, and end
-- with a '$' sign.
local query = "SELECT * FROM \[name_of_worksheet$\]"

-- you can do this if you know how many fields you get back specifically.
for field1, field2, field3, ... in rows(con, query) do      
    -- handle any parsing of data from a row, here.
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))

-- the name of the worksheet needs to be surrounded by brackets, and end
-- with a '$' sign.
local query = "SELECT * FROM \[name_of_worksheet$\]"


-- if you didn't know how many fields you might get back per row, i 
-- believe you can do this to iterate over each row...
local cursor = con:execute(query)
local t = {}
local results = cursor:fetch(t)

while results ~= nil do
    for k,v in pairs(results) do
        -- check each field in the row here
    end
    results = con:fetch(t)
end

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

使い終わったら、必ずカーソル/接続/環境を閉じてください。また、上記の接続文字列がご使用のバージョンのExcelで機能することを確認する必要があります。必要な接続文字列を決定する最も簡単な方法は、www.connectionstrings.comにアクセスして、正しい接続文字列を参照することです。

于 2012-06-21T14:20:18.687 に答える