|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
Добрый день! Помогите пожалуйста со скриптом VB, который 1. перебирает почтовые сообщения (по Subject, имени Excel документа в скрепке) 2. найдя нужные параметры читает данные из оперделенной ячейки Excel документа (который в скрепке) 3. складывает эти данные в другой документ Excel Спасибо С уважением Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 07:19 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
net_Alex_tut, Начните с : Outlook.MAPIFolder GetDefaultFolder(olFolderInbox) For Each Item In olFolder.Items TypeOf Item Is Outlook.MailItem ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 10:09 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
big-duke, спасибо за ответ и данный совет я погуглю буду также признателен если дадите ссылки на готовый скрипт похожий на то что я перечислил сам программированием давно не занимюсь по работе возникла необходимость обработать данные ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 12:14 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
net_Alex_tut, Разобрался Написал скрипт Все работает : Ищутся непрочтенные письма по теме и типу приложения выбираются аттач и читаются данные после прочтения данных сообщение помечается как прочитанное два но: 1) при небольшом количестве непрочтенных сообщений - 6-15 при общем колве в инбох около 300-400 работает норм если же количество непрочтенных 30-60 начинаются глюки- перескакивает через пачку сообщений в результате куски сообщений нерочтенные приходится по нескольку раз запускать чтобы все сообщения перебрались в чем тут дело ? 2) для чтения из эксель файла - аттачмента его нужно открыть что занимет время особенно если док эксель большой можно ли без открытия эксель файла из него читать данные ? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 15:39 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
модератору эх нэкогда ! :) посовнтуйте лучше :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 16:30 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
относительно перескакивания - это известная фича оутлуковской объектной модели: когда считываете только непрочитанные, за время пробега цикла часть сообщений могут стать прочитанными, плюс прийти новые. Поэтому коллекция oOlInb.Items бывает динамически меняется на ходу (до окончания цикла). Код: vbnet 1. 2.
Надёжный способ - вычитать коллекцию перед for-each - т.е. сделать "снимок" в отдельную переменную. И по нему уже крутить цикл. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:22 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
и в плане производительности - не лучшее решение открывать-закрывать книгу на каждом обороте цикла по аттачам. Почему бы сначала в цикле не сгрузить все аттачи (можно в массив копить ссылки), а потом после него 1 раз их просканировать и консолидировать в общую книгу? Тем более, что у вас там походу простая поколоночная сборка - можно вообще в итоговой книге формулами связи собрать, а не тратить ресурсы на обработку "открой книгу-скопируй 3 цифры-закрой книгу". Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 15:28 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
ldfanate, спасибо за ответ можете пример скрипта кинуть ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 12:10 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
ldfanate, насчет непрочитынных которые в ходе цикла становятся прочитанными и типа поэтому не читаются так когда я по нескольку раз скрипт запускаю то все непрочитанные дочитываются Вообщем покажите пожалуйста как " вычитать коллекцию перед for-each - т.е. сделать "снимок" в отдельную переменную. И по нему уже крутить цикл." скрипт пожалуста насчет "грузить все аттачи (можно в массив копить ссылки), а потом после него 1 раз их просканировать и консолидировать в общую книгу? " когда аттачей более 300 ? книга станет оооочень большая Подскажите лучше как считывать даные с книги не открывая ее ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2018, 08:03 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
net_Alex_tutвычитать коллекцию перед for-each - т.е. сделать "снимок" в отдельную переменную. И по нему уже крутить цикл." dim snimok as Outlook.MailItems Outlook.MAPIFolder GetDefaultFolder(olFolderInbox) set snimok = olFolder.Items 'снимок (коллекция писем) For Each Item In snimok ... net_Alex_tutПодскажите лучше как считывать даные с книги не открывая ее Разные варианты: 1 вариант - Формулами связей ессно. Откройте две книги, напишите формулу "=" и кликните мышкой в ячейку соседней книги, потом закройте соседнюю книгу. Увидите полный текст формулы ссылки, чтото типа ='путь\имясоседнейкниги.xls![Лист1]$A$1'. Вот в сводной книге можно макросом пробивать такие формулы ссылок, они вытянут из принятых почтой книг в сводную значения, не открывая книги. Потом заменять их на значения через Range.Copy Range.Pastespecial xlpastevalues application.cutcopymode=false Это хорошо работает, если исходные книги имеют статичную структуру (фиксированное кол-во строк и столбцов). А если у них ещё и имена файлов унифицированы (т.е. в почту шлют правильно прокодированные файлы одинаковой структуры, у которых в названии закодирован отправитель), - то можно вообще динамически текст формулы связи собирать формулой СЦЕПИТЬ() и оборачивать её формулой ДВССЫЛ(). Тогда формула в сводной таблице будет сама тянуться в нужный файл, который из почты сложится в каталог обработки. 2 вариант - штатным экселевским инструментом "Консолидация". Особенно когда файлы одинаковые по структуре. 3 вариант - через query (кодится вызов объекта QueryTable). Там можно наворотить очень сложные правила отбора из исходных книг (и он очень шустро работает на книгах большого объёма 10-50000 позиций), т.к. сводная экселина к экселине обращается не поячеечно, а как к таблице базы данных, через специальный диалект SQL. Там можно условия WHERE наворотить в полстраницы текста. Но там свои грабли, если исходные книги плохо структурированы, или если в одной колонке вперемешку числовые и текстовые значения лежат. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2018, 15:58 |
|
Автоматическое чтение данных документов Excel из почты
|
|||
---|---|---|---|
#18+
ldfanate, Спасибо большое за совет и за Ваше время! Осталось мне найти время и поэксперементировать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 06:37 |
|
|
start [/forum/topic.php?fid=61&msg=39743379&tid=2172173]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 144ms |
0 / 0 |