Бывают случаи, когда данные вы получаете через вложение электронной почты – например, вы работаете в FMCG или фармацевтической компании и еженедельно (ежемесячно) получаете отчеты в едином формате по почте от дистрибьюторов. Сегодня расскажу о способе автоматизации выгрузки таких данных из ящика сразу в QlikView или Qlik Sense.
НА ЗАМЕТКУ! Для удобства работы, предлагаю вам обзавестись отдельным адресом для получения данных.
Вариант №1: макрос
Процесс
- Данные запускаются через скрипт ежедневно.
- Письмо приходит регулярно в одно и то же время (с разницей в 5 минут).
- Письмо приходит, а вложение (источник данных) сохраняется на сетевой диск.
- Планировщик QlikView стартует через 20 минут после получения письма и обновляет данные в модели.
Макрос
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Public Sub qlikviewSaveExternal(itm As Outlook.MailItem) Dim objAtt As Outlook.Attachment Dim saveFolder As String saveFolder = "\\eundas01\Apps_Usr\Qlikview_Data\COMPANY\" For Each objAtt In itm.Attachments if InStr(objAtt.DisplayName, ".csv") Then objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName end if Next End Sub |
Формат файла можно заменить на тот, в котором у вас приходят источники данных.
За и против
Недостаток такого решения, что скрипт нужно запускать через правило в Outlook, а Outlook должен быть запущен постоянно. Т.е. если мы говорим о полной автоматизации процесса, есть одно ограничение (необходимость работы Outlook 24/7), т.к. схема не может работать как автоответ.
Установка правил
Как установить правила в почте – каждый решает сам. У меня почтовый клиент настроен на проверку двух вещей:
- Тема письма
- Наличие вложения
Вот и все! Такой скрипт поможет автоматически загружать данные в QlikView.
Вариант №2: Qlik Mailbox Коннектор
С недавнего времени появился второй бесплатный способ автоматизации загрузки вложений из электронных писем в QlikView – при помощи Qlik Mailbox Коннектора. Подключение происходит при помощи POP3 and IMAP, что безусловно удобно.
В зависимости от задачи, вас будут интересовать опции в коннекторе:
- ImapMessageAttachments или Pop3MessageAttachments
- ImapMessageDownloadAttachment или Pop3MessageDownloadAttachment
- ImapMessageGetAttachmentAsText или Pop3MessageGetAttachmentAsText
- ImapMessageGetAttachmentAsBinary или Pop3MessageGetAttachmentAsBinary
Пример скрипта для Коннектора
Пример скрипта для скачивания всех вложений со всех e-mail-ов в определенной папке на локальную машину для загрузки в Qlik:
| SET ThousandSep=’,’; | |
| SET DecimalSep=’.’; | |
| SET MoneyThousandSep=’,’; | |
| SET MoneyDecimalSep=’.’; | |
| SET MoneyFormat=’£#,##0.00;-£#,##0.00′; | |
| SET TimeFormat=’hh:mm:ss’; | |
| SET DateFormat=’DD/MM/YYYY’; | |
| SET TimestampFormat=’DD/MM/YYYY hh:mm:ss[.fff]’; | |
| SET MonthNames=’Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec’; | |
| SET DayNames=’Mon;Tue;Wed;Thu;Fri;Sat;Sun’; | |
| NOTE — In this script the server, username, password etc. have been | |
| stripped from the request URLs as the connector will then | |
| automatically pick out those configured in the connector UI. | |
| *******************************************************************/ | |
| // | |
| // QlikView/Qlik Sense must have write access to this location. | |
| // | |
| let vDownloadFolder = ‘C:\Users\YOUR_USER_NAME\Desktop\’; | |
| // | |
| // Edit this if you running Qlik Web Connectors on a different port. | |
| // | |
| let vQlikWebConnectorBase = ‘http://localhost:5555/web’; | |
| // | |
| // Email folder to process. | |
| // | |
| let vFolderToSearch = ‘Inbox’; | |
| MessagesInFolder: | |
| LOAD | |
| id, | |
| UID, | |
| inReplyTo, | |
| folder, | |
| to, | |
| cc, | |
| bcc, | |
| from, | |
| subject, | |
| sent, | |
| text, | |
| html, | |
| size, | |
| attachments, | |
| gmailMessageId, | |
| gmailThreadId, | |
| gmailLabels | |
| FROM | |
| [$(vQlikWebConnectorBase)/QlikMailBoxConnector/?table=ImapMessagesInFolder&appID=&Folder=$(vFolderToSearch)] | |
| (qvx) where attachments > 0; | |
| Let noRows = NoOfRows(‘MessagesInFolder’); | |
| for i=0 to $(noRows)-1 | |
| let vID = peek(‘id’,$(i),’MessagesInFolder’); | |
| let vUID = peek(‘UID’, $(i), ‘MessagesInFolder’); | |
| let vFolder = peek(‘MessagesInFolder’, $(i), ‘MessagesInFolder’); | |
| Attachments: | |
| LOAD | |
| ‘$(vID)’ as id, | |
| ‘$(vUID)’ as AttachmentUID, | |
| ‘$(vFolder)’ as AttachmentFolder, | |
| FileName as AttachmentFileName | |
| FROM | |
| [$(vQlikWebConnectorBase)/QlikMailBoxConnector/?table=ImapMessageAttachments&appID=&Folder=$(vFolder)&MessageID=$(vUID)] | |
| (qvx) where FileName <> »; | |
| NEXT | |
| LET noRows = NoOfRows(‘Attachments’); | |
| for i=0 to $(noRows)-1 | |
| let vID = peek(‘id’,$(i),’Attachments’); | |
| let vFolder = peek(‘AttachmentFolder’, $(i), ‘Attachments’); | |
| let vUID = peek(‘AttachmentUID’, $(i), ‘Attachments’); | |
| let vFilename = peek(‘AttachmentFileName’, $(i), ‘Attachments’); | |
| // | |
| // Note — we use the UID here as we need something unique to prevent attachments with the same name overwriting previous ones. | |
| // | |
| let vTarget = ‘$(vDownloadFolder)$(vUID)_$(vFilename)’; | |
| trace ‘About to download $(vFilename) in email $(vUID) to $(vTarget)’; | |
| Downloads: | |
| LOAD | |
| ‘$(vID)’ as id, | |
| ‘$(vUID)’ as Downloads_UID, | |
| Status as Downloads_Status, | |
| ‘$(vFilename)’ as Downloads_Filename | |
| FROM | |
| [$(vQlikWebConnectorBase)/QlikMailBoxConnector/?table=ImapMessageDownloadAttachment&appID=&MessageID=$(vUID)&AttachmentFileName=$(vFilename)&TargetPath=$(vTarget)&Folder=$(vFolder)] | |
| (qvx); | |
| next i |
О Qlik Mailbox Коннекторе можно прочитать в нашем обзоре бесплатных веб-коннекторов Qlik (ранее – QVSource) или в официальном хэлпе Qlik.
На этом на сегодня все! Хороших вам разработок!

День добрый.
Спасибо.
Можно еще и такой код использовать в качестве сценария в Outlook :