У нас есть небольшой проект, который включает автоматический анализ некоторых журналов сервера / почты (среди прочего). План А заключался в том, чтобы просто собрать вместе несколько Python и Django, чтобы сделать это правильно ухмыляется , но я получил вето, и решение должно быть чисто 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, чтобы каждый раз переименовывать файл, я полагаю, что могу, но на самом деле мне любопытно, почему это происходит?
2. Вставка в существующую таблицу
Второй вопрос, приведенный выше, открывает файл CSV как новый лист, есть ли способ вместо этого выполнить вышеуказанный анализ, но вставить его во временный новый лист в нашей книге?
3. Чтение записей, добавление в основную таблицу
Следующий шаг - взять наш файл журнала и интегрировать его в нашу главную рабочую таблицу, которая содержит истории для каждого сервера.
Исходя из моих довольно ограниченных знаний Excel, я предполагал, что мы сделаем что-то вроде:
- Внешний цикл: цикл через наш вход
журнал, строка за строкой.
- Возьмите имя сервера и выполните поиск по нему в основном списке.
- Если его не существует, мы создаем новую строку для этого сервера.
- Внутренний цикл: цикл по каждому столбцу
нашего журнала.
- Предполагая, что сервер уже там, мы возвращаемся и берем дату в журнале. Затем мы делаем
hlookup в основном списке на нашу дату. Мы предполагаем, что он не существует, однако, если он существует, мы можем просто перезаписать эту ячейку. Если его не существует, нам нужно найти правильное
дата вставки (есть вероятность, что в последовательности могут отсутствовать даты) и вставьте нашу дату.
Кажется ли вышеупомянутая логика правильной? Или есть более эффективный способ сделать это в Excel? (Я подозреваю, что, вероятно, я не очень хорошо знаю объектную модель Excel).
4. Подведение итогов за произвольный диапазон дат
Последний шаг заключается в том, чтобы фактически рассчитать итоговые значения для серверов, которые мы хотим, на основе произвольного диапазона дат. Это будет просто макро-функция, которая принимает три аргумента (сервер, дата начала, дата окончания).
Есть список серверов, которые нас особенно интересуют, я думаю, мы, вероятно, сохраним это в отдельном рабочем листе. Затем мы просто вызовем функцию для каждого в этом списке и сделаем горизонтальную сумму по строке между двумя датами. Есть ли какой-нибудь ярлык, который я могу использовать здесь для этой части?