LUA:如何从xls或csv文件中提取特定值并将其保存为变量?

时间:2014-06-04 13:24:39

标签: excel search lua

我是lua的初学者(充其量)。

我有一个* .lua脚本,在某些时候有一个函数,当被调用时设置一组变量。 (或更新它们) 这些特定变量应该从xls或csv文件中提取 - 这可以由excel管理。

所以在excel中我有这样的行和列:

valuefield_1 100 20 30

valuefield_2 60 150 40

valuefield_3 80 90 170

我希望能够通过xls / csv中的lua搜索特定的值字段,例如“valuefield_1”,并获取第三列中的值,即20。然后将其保存为变量x lua脚本,这样每当我调用变量x时,它使用值20,直到我通过搜索不同的值字段值来更新变量x和不同的值。

在我努力找到这个(看似简单)问题的解决方案时,我遇到的是lua的xls模块,如何输出文件,如何做图表,复杂的东西远远超出我想要做的。

是不是有一种简单的方法可以让我有一条线来定义我的变量:

variable_x = valuefield_x

行中第三列中单元格的值

这样我就可以根据我寻找的那个值域简单地在我的luascript中设置valuefield_x?

这就是我真正需要的全部内容,我不需要编写xls / csv文件或更改其中的任何内容。我想要的只是准确读取特定列中的特定单元格,这些列由我在第一列中搜索的“valuefield”选择。

有人可以告诉我这些命令是什么吗?

2 个答案:

答案 0 :(得分:0)

我不知道Lua中的.xls文件阅读器,并且怀疑用纯Lua编写一个是可行的(虽然看xlrd module in Python,可能很容易转换为Lua)。在Python中,您可以使用win32com模块轻松完成,因此如果您可以选择使用Python,那么它很容易学习。

对于.CSV文件,您将使用open和read,就像任何其他文本文件一样,然后使用Lua模式匹配进行解析。如果你发布一些你展示你所尝试的东西(这可能就是为什么你有这么多的downvotes),那么我可以发布更具体的答案。

答案 1 :(得分:0)

谢谢你的回答,Schollii。 问题几乎是我甚至不知道如何开始访问,打开,编辑或通过lua使用Excel,所以任何代码示例都是无用的。因此,我认为最好描述我需要的内容,而不是错误地使用处理完全不同的事物的代码片段。 (例如io.open和其他东西)

一如既往,经过多次研究和浏览3本不同的手册并重新阅读谁知道有多少不相关的答案,我找到了一个适合我的答案。它实际上非常简单,所以我无法想象有多少人可以通过五分钟的答案为我节省数小时的研究时间。让我们希望通过提供一个非常彻底的答案,我可以确保像我这样希望做同样的其他初学者不必进行相同数量的研究。是的,答案是非常基本的,是的,我也解释了大多数知道lua代码的人不需要解释的事情。这适合像我这样的初学者。

首先:下载" Lua for Windows" http://code.google.com/p/luaforwindows/

Lua本身不能处理excel格式,所以你需要使用插件LUACOM,这是通过" Lua for Windows安装的模块之一" 它还包括一个漂亮的脚本编辑器,你可以右键单击你的脚本文件,点击编辑脚本,你有一个很好的界面来编辑和测试你的脚本。

实际脚本:

脚本的第一部分要求您通过luacom使用Excel。

require('luacom')
excel = luacom.CreateObject("Excel.Application")
excel.Visible = true

a。"要求" line告诉lua它需要模块" luacom",才能使用这个lua脚本的模块函数。

湾通过luacom的第二行打开一个Excel实例,该实例位于脚本中,称为" excel"。必须能够使用命令对其进行定位。

℃。 excel.Visible确定用户是否可以看到excel的打开实例或者是否使用它是不可见的。注意" excel。"在我们调用的实例中的参考点" excel"在第2行。

(替代) 通过将第二行替换为:

,还可以定位用户已手动打开的现有excel实例。
excel = luacom.GetObject("Excel.Application")

如果我们使用替代方法,并且定位已经打开的excel程序,我们就可以在第一张表中定位所有值。但是,如果我们创建一个新的excel实例,我们必须打开我们想要读取的文件。

fpath = "C:\\Examplepath\\Example.xlsx"
wb = excel.Workbooks:Open(fpath)
ws = wb.Worksheets("ImportantSheet1")

一个。在此部分的第一行中,fpath确定了我们希望访问的xlsx文件的位置。请注意" \"用来代替" \"。

湾我们创建了参考资料" wb"类似于我们的第一部分代码中的" excel参考。但是,这个会在位置(fapth)打开一个工作簿文件(您的Excel文件)。再次,请注意" excel。"将代码指向我们之前创建的excel实例。

℃。此行确定在刚刚打开的工作簿文件中打开哪个工作表。在这种情况下,它是名为" ImportantSheet1"的表格。

desired_name = "whatIseek"
for row=1, 4 do
    for col=1, 4 do
        local cell_location = excel.Cells(row, col).Value2

        if cell_location == desired_name then
            Value1 = excel.Cells(row, col +1).Value2
            Value2 = excel.Cells(row, col +2).Value2
            Value3 = excel.Cells(row, col +3).Value2
        end
    end
end

            print(Value1)
            print(Value2)
            print(Value3)

一个。 desired_name设置我们寻找的值(在本例中为字符串)

湾第2行和第3行确定对1-4行和1-4列执行以下过程,但您不必调用那些" row"或" col"。

℃。下一行设置变量"当前单元格的值#34;到位置(x,y)的excel中的单元格的值。您需要使用" .Value2" (不是"。值")在此命令中。所以现在我们的临时变量具有单元格值。

d。在" if"命令,我们检查单元格的当前值是否等于我们之前指定的值" desired_name"我们寻求的。

即如果是这种情况,"那么"接下来的3行将值1-3设置为同一行中下一列中的单元格。 (所以"读取"从左到右显示下一个值并将它们保存为变量)

F。最后,为了检查我们是否确实拥有了我们想要的值,我们在执行脚本时使用print命令来查看它们。 (当然,这不是必须使用这些值,这仅仅是为了检查这个脚本是否有效)