我们有一个小型项目,涉及自动解析某些服务器/邮件日志(等等)。现在,计划A只是一起Python和Django一起做正确微笑,但我得到否决,解决方案必须是纯Excel,因为它相信会更便携。Excel VBA - 分析服务器日志
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知识,我是假设,我们会做一些事情,如:通过线依次通过我们的输入 日志行:
- 外环。
- 抓住服务器名称,然后在主列表中对其进行查找。
- 如果它不存在,我们为这个服务器创建一个新行。
- 内循环:循环遍历我们日志的每个列 。
- 假设服务器现在在那里,我们回去抓取日志中的日期。然后,我们在主列表中为我们的日期做一个 hlookup。我们假设它不存在,但是,如果它存在,我们可以覆盖该单元格。如果它不存在,我们需要找到正确的 插入日期(有可能在序列中缺少日期)并插入我们的日期。
上述逻辑看起来是否合理?或者有更有效的方法在Excel中执行它? (我怀疑可能有,我不太了解Excel对象模型)。
4.总结出总跨任意日期范围
的最后一步是实际计算总计为我们想要的服务器,基于任意日期范围。这只是一个宏函数,需要三个参数(服务器,开始日期,结束日期)。
有一个我们特别感兴趣的服务器列表,我猜我们可能会将其存储在单独的工作表中。然后,我们将为该列表中的每个人做一个函数调用,并在这两个日期之间横跨该行进行横向求和。有什么快捷方式我可以在这里使用这部分?
您的Excel/VBA唯一限制允许您使用ADO吗?如果是这样,请参阅http://support.microsoft.com/kb/257819不同的方法 – barrowc 2010-03-02 01:45:58