【问题标题】:LUA: How can extract specific values from a xls or csv file and save them as variables?LUA:如何从 xls 或 csv 文件中提取特定值并将它们保存为变量?
【发布时间】:2014-07-25 04:15:42
【问题描述】:

我是 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,例如“valuefield_1”并获取第三列中的值,即 20。然后将其保存为变量 x 在我的lua 脚本,这样每当我调用变量 x 时,它都会使用值 20,直到我通过搜索不同的 valuefield 值将变量 x 更新为不同的值。

在我努力寻找解决这个(看似简单的)问题的过程中,我遇到的只是 lua 的 xls 模块,如何输出文件,如何做图表,远远超出我想做的复杂事情。

难道没有一种简单的方法可以让我在其中定义我的变量的行:

variable_x = valuefield_x行第三列单元格的值

这样我就可以根据我要查找的 valuefield 类型在我的 luascript 中简单地设置 valuefield_x?

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

谁能告诉我那是什么命令?

【问题讨论】:

    标签: excel search lua


    【解决方案1】:

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

    对于 .CSV 文件,您可以像使用任何其他文本文件一样使用打开和读取,然后使用 Lua 模式匹配进行解析。如果您发布一些展示您尝试过的东西的地方(这可能是您得到这么多反对票的原因),那么我可以发布更具体的答案。

    【讨论】:

      【解决方案2】:

      感谢您的回答,肖利。 问题在于我什至不知道如何开始通过 lua 访问、打开、编辑或以其他方式使用 Excel,因此任何代码示例几乎都是无用的。因此,我认为最好描述我需要什么,而不是用处理完全不同事物的代码 sn-ps 来误导。 (比如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.“require”行告诉 lua 它需要模块“luacom”,才能使用该 lua 脚本的 modules 功能。

      b.通过 luacom 的第二行打开一个 Excel 实例,该实例在脚本中称为“excel”。这对于使用命令来定位它是必要的。

      c。 excel.Visible 确定打开的 excel 实例是否可以被用户看到,或者它使用的是否不可见。注意“excel”。我们在第 2 行中称为“excel”的实例的参考点。

      (替代) 也可以通过将第二行替换为以下内容来定位已由用户手动打开的现有 excel 实例:

      excel = luacom.GetObject("Excel.Application")
      

      如果我们使用另一种方法,并针对已经打开的 excel 程序,我们已经可以针对第一张表中的所有值。但是,如果我们创建一个新的 excel 实例,我们必须打开我们希望从中读取的文件。

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

      一个。在本部分的第一行中,fpath 确定了我们希望访问的 xlsx 文件的位置。请注意,使用“\”而不是“\”。

      b.我们在第一部分代码中创建了类似于“excel 参考”的参考“wb”。然而,这会在位置 (fapth) 处打开一个工作簿文件(您的 excel 文件)。同样,请注意“excel.”如何指向代码在我们之前创建的 excel 实例中。

      c。此行确定要在刚刚打开的 Workbook 文件中打开哪个工作表。在本例中,它是名为“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 设置我们寻求的值(在本例中为字符串)

      b.第 2 行和第 3 行确定要对第 1-4 行和第 1-4 列执行以下过程,尽管您不必将它们称为“行”或“列”。

      c。下一行将变量“当前单元格”的值设置为 excel 中位置 (x, y) 处的单元格的值。您需要在此命令中使用“.Value2”(而不是“.Value”)。所以现在我们的临时变量有了单元格的值。

      d。在“if”命令中,我们检查单元格的当前值是否等于我们之前指定的值,即我们寻找的“desired_name”。

      e。如果是这种情况,则“然后”接下来的 3 行将值 1-3 设置为同一行中下一列中的单元格。 (所以它从左到右“读取”下一个值并将它们保存为我们的变量)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-25
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多