Как мониторить изменение файла?

В сетевой папке есть excel файл в котором ведется учет заказов пользователей. Можно ли как-нибудь автоматизировать уведомление пользователей о том, что их заказ выполнен? Идеально было бы, чтобы при изменении статуса сразу же (ну или по щелчку мыши) отправлялось письмо адресату (через корпоративный Microsoft Exchange). Подозреваю, что с помощью VBS макроса это можно провернуть, но сам не силен в нем.
  • Вопрос задан
  • 7706 просмотров
Пригласить эксперта
Ответы на вопрос 3
VoidVolker
@VoidVolker
Вот примерно такая задача для nncron:
#( Задача_151321082013
WatchFile: "\\path\file.ext"
SingleInstance
Action:
START-APP: <любимая программа для отправки почты>
)#

Еще есть варианты периодической проверки последней даты запись в файл и отправки динамически сгенерированного письма через SMTP — но это уже дополнительным плагином.

Под семеркой ставить как приложение (опция в интсалляторе), под ХР можно как сервис, но для запуска приложений надо будет использовать опции авторизации (AsLoggedUser и прочие). Линк на самую свежую версию.

Если интересуют подробности, то вот мануал, а тут форум.

Если есть какие вопросы — спрашивайте, отвечу.
Ответ написан
@Alexxander
С помощью VBA можно сделать. Но не очень ясно как устроена таблица.

Могу предположить, что в определенной ячейке каждой строки находится статус. Тогда создаем процедуру Worksheet_Change и анализируем изменилась ли ячейка статуса и как изменилась. Если в ней оказывается, скажем, слово «Готово», посылаем письмо на адрес, взятый (или определенный другим образом) из определенной ячейки той же строки.

Письмо можно отправить через MS Outlook, либо с помощью какой-нибудь сторонней программы (напр., blat).
Ответ написан
copist
@copist
Мидл, хочешь стать синьором? http://copi.st/ExhE
В общем случае только по наличию такого файла ещё нельзя ничего сделать.
Чтобы изменения статуса вызывало отправку имейла, нужно изменить ту программу, которая пишет в этот файл. И у меня подозрение, что это Microsoft Excel :) У вас нет проблем с тем, что только один пользователь может открыть такой файл?

Алгоритм такой:
В файл ексель надо встроить макрос для отправки сообщения по почте по событию «Изменение данных в ячейке».
Пусть в ексельке есть колонки «Имейл», «Статус заказа»
Когда пользователь изменил статус в колонке «Статус заказа», VBA смотрит на значения в ячейке «Имейл» и отправляет письмо на этот имейл
Не помню, можно ли в VBA «прибиндить» событие на изменение значения любой ячейки в заданной колонке.

Ещё есть такой вариант:
Нужна крон-задача для регулярной проверки изменений в файле ексель.
Пусть в ексельке есть колонки «Имейл», «Статус заказа», «Старый статус заказа»
При этом «Старый статус заказа» от пользователей скрыт, но к нему можно получить доступ через VBA
1. Пользователь изменил статус в колонке «Статус заказа», сохранил и закрыл файл
2. Крон-задача открывает файл, ищет все строки, где «Статус заказа» НЕ РАВНО «Старый статус заказа»
2.1. Для каждой такой строки отправляет отдельное письмо на адрес, указанный в той же строке в ячейке «Имейл»
2.2. Вставляет в ячейку «Старый статус заказа» значение из «Статус заказа»
3. Крон-задача закрывает файл
Недостаток — не очень оперативно и обязательно надо дождаться, пока крон не закончит работу

Третий вариант:
Пусть в ексельке есть колонки «Уникальный номер заказа», «Имейл», «Статус заказа»
1. Пользователь изменил статус в колонке «Статус заказа», сохранил и закрыл файл
2. Крон периодически копирует файл ексель в другую папку с новым уникальным именем и знает, какое имя было у этого же файла в последний раз, когда запускался крон
Например оригинальный файл c:/sales.xls, а копии имеют имя c:/temp/sales_1.xls, c:/temp/sales_2.xls, c:/temp/sales_3.xls и т.д.
3. После копирования крон сравнивает два последних файла между собой
3.1. Для каждого значения в ячейке «Уникальный номер заказа» самого последнего файла ищется такое же значение в колонке «Уникальный номер заказа» ПРЕДпоследнего файла.
3.2. Сравниваются значения ячеек «Статус заказа» найденных строк из старого и нового файла
3.3. Если значение изменилось, то отправляется имейл на адрес, указанный в ячейке «Имейл» изменённой строки нового файла
4. Крон закрывает файл
5. Крон удаляет из временной папки все лишние файлы, оставляя только самый последний
Вашим менеджерам можно не ждать, пока крон отработает до конца, но они обязаны вводить уникальные номера заказов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы