Excel VBA – 分析服务器日志

我们有一个小的项目,涉及自动parsing一些服务器/邮件日志(等等)。 现在,计划A只是一起Python和Django一起做正确的笑话 ,但我得到否决,解决scheme必须是纯Excel,因为它相信会更便携。

1.导入制表符分隔的文件

我们的input文件是一个“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文件作为一个整体新的工作表,是否有一种方法,而不是做上述parsing,但将其插入到我们的工作簿中的临时新工作表?

3.阅读条目,添加到主表

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

从我相当有限的Excel知识,我假设我们会做一些事情:

  1. 外循环:逐行循环input日志。
  2. 抓住服务器名称,并在主列表中进行查找。
  3. 如果它不存在,我们为这个服务器创build一个新行。
  4. 内循环:循环遍历我们日志的每一列。
  5. 假设服务器现在在那里,我们回去抓取日志中的date。 然后,我们在主表中查找我们的date。 我们假设它不存在,但是,如果它存在,我们可以覆盖该单元格。 如果它不存在,我们需要find正确的插入date(有可能在序列中缺lessdate)并插入我们的date。

上面的逻辑看起来好听吗? 还是有更有效的方法来做到这一点在Excel中? (我怀疑可能是,我不太了解Excel对象模型)。

4.总计任意date范围内的总数

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

有一个我们特别感兴趣的服务器列表,我猜我们可能会将其存储在一个单独的工作表中。 然后,我们将为该列表中的每个人做一个函数调用,并在这两个date之间横跨该行进行横向求和。 有什么快捷方式我可以在这里使用这部分?

你有没有考虑使用Log Parser ?

日志parsing器是一个function强大的多function工具,它提供对基于文本的数据(如日志文件,XML文件和CSV文件)以及Windows®操作系统上的关键数据源(如事件日志,registry,文件系统和ActiveDirectory®。