Как вытащить email из excel

Обновлено: 07.07.2024

Прежде чем начать читать статью прошу принять к сведению объявление: используйте СВОИ АДРЕСА ЭЛ.ПОЧТЫ при тестировании кодов . Не надо отсылать письма на указанные в статье e-mail адреса- это все приходит мне на почту. Помимо этого Вы сами не сможете понять работает или нет, т.к. письма придут мне, а не Вам.
Спасибо за понимание
P.S. А если написанное выше Вы все же проигнорировали и отправили письмо на мои адреса электронной почты - это означает, что Вы соглашаетесь с тем, что вся информация внутри письма, включая вложения, может быть использована мной без ограничений в личных целях.


Отправка через меню Excel
Отправку без кода осуществить достаточно просто:

Далее выбирается способ отправки:

Также можно указать несколько получателей:

Этот код отправляет одно письмо и одно вложение за раз. Но если несколько раз вызвать метод .Attachments.Add, то можно добавить еще файлы:

.Attachments.Add "C:\Temp\Книга1.xlsx" .Attachments.Add "C:\Temp\Книга2.xlsx" .Attachments.Add "C:\Documents\Report.rar"

objOutlookApp.Session.Logon "user","1234",False, True

имеет особое значение. По сути она нужна только в тех случаях, когда в Outlook настроено несколько профилей(не путать с учетными записями) и запускать нужно от конкретного. Если профиль только один или не указан, то Outlook запускается с профилем по умолчанию. Для этого строку нужно записать без параметров(так же можно записать эту строку, если Outlook при попытке создания письма выдает ошибку профиля):

Этот код отправляет одно письмо и вставляет одну картинку. За это отвечает строка

Если картинку надо вложить с заранее указанными размерами, то строка будет выглядеть так:

"<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & " height=240 width=180>" 'height - высота 'width - ширина

Если надо добавить несколько картинок, то метод .Attachments.Add sPicture надо будет вызвать столько раз, сколько картинок(для каждого свой путь к картинке).

Важно помнить: пути для картинок должны содержать полный путь до файла, включая его имя и расширение: C:\Документы\Изображения\Excel_vba_ru.jpg . При указании только имени Excel_vba_ru.jpg или пути без расширения ( C:\Документы\Изображения\Excel_vba_ru ) ошибки не будет, но картинка не будет вставлена, а вместо неё скорее всего будет текст "Ошибка загрузки картинки!" или пустой квадрат вместо реальной картинки.

  • Outlook 2007 : Меню-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)
  • Outlook 2010 и выше : Файл-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)

ВАЖНО: Если компьютер управляется администратором Microsoft Exchange или Microsoft Windows Active Directory Domain Services и администратором в качестве параметров по умолчанию установлен запрет на внесение изменений в параметры безопасности пользователями, возможность изменения данных настроек безопасности программного доступа будет недоступна.



Но так же при отправке файлов и писем часто необходимо не привязываться к конкретной почтовой программе. Ведь далеко не все ставят Outlook. Многие используют иные почтовые программы, например TheBat.

Данный код отправляет письмо, используя объект CDO(Collaboration Data Objects - присутствует во всех версиях Windows) и от имени Вашей учетной записи(либо Яндекс, либо Мэйл, либо Рамблер либо др.).

Это основные моменты. Поля Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) думаю не нуждаются в расшифровке.

Чтобы использовать данный код вы можете либо просто скопировать его прямо со страницы, либо скачать файл. В файле программа немного упрощена к использованию - в ячейки листа вам необходимо будет внести поля: Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) и выбрать SMTPserver. SMTPserver выбирается из выпадающего списка. Сам список является динамическим и расположен на листе "Settinngs". Там же расположены поля Учетной записи и Пароль, которые автоматически подставляются в необходимые поля на листе "Отправка". Т.к. список динамический Вы можете просто добавлять к уже имеющимся новые сервисы и потом просто выбирать их из списка. Так же в файле есть еще одна возможность - выбрать файл. Для этого надо просто нажать на кнопку и выбрать файл.

Самый главный момент:
AddRelatedBodyPart

    C:\Документы\Изображения\11.jpg - указывается полный путь к файлу картинки на компьютере, включая расширение файла.
    11.jpg - указывается имя картинки с расширением. Это имя будет использовано внутри письма и именно его необходимо будет указать дальше в " urn:schemas:mailheader:Content-ID ". И указывать обязательно в треугольных скобках: " "
    внутри же самого письма в том месте, где должна отображаться картинки надо записать:

в приведенном выше коде картинка вставляется в самом начале письма и после неё так же добавляется перенос на новую строку при помощи тэга

Задача: у вас есть ячейки, содержащие адреса электронной почты, а также другой текст. Вам нужно извлечь адреса электронной почты.

Решение: проблему можно решить с помощью макроса, пользовательской функции или мегаформулы.

Макрос

В основе макроса лежит функция VBA Split. Допустим, что ячейка содержит текст Write to lora@mrexcel.com to book a seminar. Если передать этот текст в функцию Split и указать, что текст следует разбить на элементы, разделенные пробелом – x = Split(cell.Value, " " ) – VBA вернет массив, где каждое слово будет элементом массива. На рис. 1 показан массив x после использования функция Split.

Рис. 1. Функция Split возвращает массив, где каждое слово будет элементом массива

Рис. 1. Функция Split возвращает массив, где каждое слово будет элементом массива

После этого макрос перебирает все элементы массива х, пока не найдет слово, соответствующее шаблону *@*.* – If x(i) Like " *@*.* " Then. Когда соответствие найдено, макрос записывает адрес электронной почты справа от исходной ячейки – cell.Offset(0, 1) = x(i). Для начала выделите все ячейки, содержащие текст (в том числе и адреса электронной почты), а затем запустите макрос:

Sub getEmailMacro()
Dim x As Variant
Dim i As Integer
Dim note As String

For Each cell In Selection
x = Split(cell.Value, " " )
For i = 0 To UBound(x)
If x(i) Like " *@*.* " Then
cell.Offset(0, 1) = x(i)
Exit For
End If
Next i
Next cell
End Sub

Адреса электронной почты записываются справа от исходного (выбранного) значения (рис. 2).

Рис. 2. Извлечение адресов электронной почты макросом

Рис. 2. Извлечение адресов электронной почты макросом

Пользовательская функция

Вы сможете адаптировать приведенный выше макрос в функцию, определяемую пользователем. Аргумент этой функции – текст, содержащий адрес электронной почты. Возвращаемое значение – сам адрес электронной почты (рис. 3).

Рис. 3. Пользовательская функция, извлекающая адрес электронной почты

Рис. 3. Пользовательская функция, извлекающая адрес электронной почты

Код пользовательской функции:

Public Function getEmail(note As String) As String
Dim x As Variant
Dim i As Integer
x = Split(note, " " )
For i = 0 To UBound(x)
If x(i) Like " *@*.* " Then
getEmail = x(i)
Exit Function
End If
Next i
End Function

Мегаформула

Несмотря на то, что следующая формула потребует некоторого времени на написание, она крайне умна и удивительно проста в эксплуатации: =СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ( " " &A1; " " ;ПОВТОР( " " ;20));НАЙТИ( " @ " ;ПОДСТАВИТЬ( " " &A1; " " ;ПОВТОР( " " ;20)))-20;40)). Сначала

Формула изначально использует функцию ПОДСТАВИТЬ, чтобы в исходном тексте заменить каждый пробел на двадцать пробелов подряд. Это позволяет отделить каждое слово в тексте большим числом пробелов.

Рис. 4. Мегаформула извлекает адрес электронной почты

Рис. 4. Мегаформула извлекает адрес электронной почты

Резюме: извлечение адреса электронной почты из ячейки, содержащей другой текст, можно выполнить с помощью макроса, пользовательской функции или мегаформулы.

Найти все адреса email в файле
Здравствуйте, банальный вопрос у меня, нужно Html файл парсить и понаходить все эмейлы, да да да с.

Compact and Repair для Excel-евского файла?
как осуществить? возникла ситуация что он немерянно раздулся, раз в 10 (до 2 мегов) но информации.

Записать все встречающиеся несколько раз IP адреса в txt файле
Есть код на C, который записывает все, встречающиеся несколько раз, IP адреса в txt файле.


Удалить из массива все минимальные элементы. Считаем, что таких элементов может быть несколько
Удалить из массива все минимальные элементы. Считаем, что таких элементов может быть несколько. .

Считываешь построчно, и в считанной строке находишь слова, у которых есть символ @

а что считывать построчно?

Добавлено через 3 минуты
экселевский файл?

Открываешь excel-файл на чтение, txt-файл на запись.
Из первого читаешь строку, в ней ищеш слово в котором есть символ @ и это слово (т.е. e-mail) записываешь во второй файл.
Закрываешь оба файла.

Или нужен исходник, программа?

а почему слова? вы уверены, что они обрамляются там внутри пробелами?
да нет, программу попробую написать сам, спасибо. кстати, excel несколько форматов файла, какой хоть нужно обрабатывать?
Если что-то типа *.xsl или ему подобное, то там такие дебри. плюс каждая версия вносит что-то свое.
Проще, если файл в текстовом виде (или перегнать в текстовый или *.csv), тогда делов на пять минут спасибо. хотя в текстовом виде можно сохранить только текущий лист. ну да ладно. но похоже неверено задано регулярное выражение для email. что-то никак не пойму, что там не так если у вас формат exel, то я бы пошел по такому пути:
- подключил бы PHPExcel
- данные каждого листа в массив
- в цикле элементы массива через strpos проверить на наличие знака @ (если известно в каком столбце может быть mail, то вообще прекрасно - не нужно все элементы прогонять, а только с определенным ключиком)
- ну и при нахождении символа - элемент массива содержащий его отправляем на запись в отдельный файл про phpexcel первый раз слышу
а что неправильно у меня? все листы excel-файла сохраненны в текстовом виде и лежат в одной папке
email-ы могут быть где угодно на листе.
подскажите, что не так в моём рег. выражении

одна из самых распространенных библиотек для работы с форматами exel

но похоже неверено задано регулярное выражение для email. что-то никак не пойму, что там не так Как Вы это определили? Какой результат работы скрипта?

получить email адреса из файла
Здраствуйте, помогите получить email-адреса из файлов формата .txt и .csv например файл text.txt с.

Найти на страницах все email адреса
Здравствуйте. Для парсинга страниц я использую htmlagilitypack Как мне найти на страницах все.


Определите,может ли этот IP-адреса быть назначен узлом
Определите,может ли этот IP-адреса быть назначен узлом. Если нет то объясните, почему IP-адрес не.

Как связать несколько листов excel с использованием макросов
Здравствуйте,очень рассчитываю на вашу помощь. Я никак не могу найти нужную функцию или же написать.

Печать листов в файле Excel на разные лотки
Добрый день! Имеется следующая задачка: есть более 20 файлов excel с одинаковыми названиями.

Бывает нужно разослать большое количество писем списку контактов из таблицы в Excel.

Это может быть список потенциальных клиентов с мероприятия, выгрузка контактов из программы (1С, Битрикс24, amoCRM), просто список родственников, которые с нетерпением ждут от вас поздравления с праздником или уникального предложения.

Расскажу, как сделать это просто, быстро и бесплатно. Для решения задачи понадобится Excel, Word и Outlook из пакета Microsoft Office.

Запустим Мастер Слияния: вкладка Рассылки (Mailings), Начать слияние (Start Mail Merge), далее Пошаговый мастер слияния (Step-by-Step Merge Wizard).

Пошаговый мастер слияния

Запуск пошагового мастера слияния

Откроется мастер, состоящий из 6 этапов.

Выбор типа документа

Выбор типа документа

На втором этапе нужно указать, какой документ будет использоваться в качестве шаблона, выберем Текущий документ (Current document).

Выбор документа

Выбор документа

Выбор получателей

Выбор получателей

Откроется окно Получатели слияния, в нем можно выбрать или отменить клиентов для которых делаем рассылку.

Вставка поля слияния

Вставка поля

Создание правила

Создание правила

Настройка правила

Настройка правила

В итоге, после вставки полей должен получиться шаблон похожий на мой (вставленные поля выделил красным цветом).

На пятом этапе можно предварительно просмотреть результаты слияния. Для перехода между письмами служат кнопки со стрелками.

На завершающем 6 этапе нужно выбрать единственный пункт Электронная почта.

Завершение слияния

Завершение слияния

Затем в открывшемся окне указать тему отправляемых писем и выбрать в поле Кому столбец нашей таблицы Excel, в котором содержаться адреса получателей

Запуск рассылки

Запуск рассылки

На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.

Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.

Читайте также: