我們有一個小型項目,涉及自動解析某些服務器/郵件日誌(等等)。現在,計劃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