Excel VBA - 解析服务器日志

时间:2010-03-01 06:20:09

标签: excel-vba parsing excel csv logging vba

我们有一个小项目,涉及自动解析一些服务器/邮件日志(以及其他内容)。现在,计划A只是将一些Python和Django合并到一起来正确地执行此操作 grins ,但我得到了否决权,解决方案必须是纯Excel,因为它相信会更便携

1。导入制表符分隔文件

我们的输入文件是“CSV”文件,但它实际上是一个以制表符分隔的文件。

类似的东西:

"Server Name"   "Server Alias"  "1Feb09"    "2Feb09"    "3Fe09" "4Feb09"
"BobsServer"    "Foobar foobar" "34234" "23432" "52234" "23432"
"JanesServer"   "Foobar foobar" "30984" "34233" "34523" "92342"
"SamsServer"    "Foobar foobar" "12321" "23423" "23423" "23423"

我正在使用以下VBA导入此内容:

Workbooks.OpenText Filename:="C:\logs.csv", Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True

有趣的是,当文件扩展名为“.csv”时,它似乎被破坏了,Excel将所有内容都推到了一列。然而,当文件扩展名是其他东西(例如“.txt”)时,它导入正常。每次都是完全相同的文件这是Excel处理文件扩展名的一些怪癖而我错过了什么?

我希望我不需要在VBA中做一些hackery来重命名文件,我想我可以,但我真的很好奇为什么会这样?

2。粘贴到现有工作表

第二个问题,上面打开了CSV文件作为一个完整的新工作表,有没有办法代替上面的解析,但是将它插入我们工作簿中的临时新工作表?

第3。读取条目,添加到主表

下一步是获取我们的日志文件,并将其集成到我们的主工作表中,其中包含每个服务器的历史记录。

从我相当有限的Excel知识中,我假设我们会做类似的事情:

  1. 外循环:循环输入 记录,逐行。
  2. 获取服务器名称,并在主列表中为其执行vlookup。
  3. 如果它不存在,我们会为此服务器创建一个新行。
  4. 内循环:遍历每列 我们的日志。
  5. 假设服务器现在在那里,我们返回并在日志中获取日期。然后我们做一个 hlookup在我们约会的主列表中。我们假设它不存在,但是,如果它存在,我们可以覆盖该单元格。如果它不存在,我们需要找到正确的 插入日期(序列中可能缺少日期)并插入我们的日期。
  6. 上述逻辑看起来是否合理?或者是否有更有效的方法在Excel中执行此操作? (我怀疑可能存在,我不太了解Excel对象模型)。

    4。在任意日期范围内汇总总数

    最后一步是根据任意日期范围实际计算我们想要的服务器的总数。这只是一个宏函数,需要三个参数(服务器,开始日期,结束日期)。

    有一个我们特别感兴趣的服务器列表,我猜我们可能会将它存储在一个单独的工作表中。然后我们将对该列表中的每个函数执行函数调用,并在两个日期之间对该行执行水平求和。我可以在这里使用某种捷径吗?

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用Log Parser

  

日志解析器功能强大,功能多样   提供通用查询的工具   访问基于文本的数据,如日志   文件,XML文件和CSV文件,如   以及关键数据来源   Windows®等操作系统   事件日志,注册表,文件   系统和ActiveDirectory®。