Заменить конкретные идентификаторы в теле с определенными гиперссылками - PullRequest
0 голосов
/ 19 июня 2011

После моей тщательной домашней работы я задаю этот вопрос. Пожалуйста, помогите мне решить эту проблему ..

Я хочу найти ASA1234yy в теле текста и заменить его встроенной гиперссылкой [ASA1234yy] [1] В теле может быть много идентификаторов этого типа, и каждая из этих гиперссылок должна быть уникальной в соответствии с шаблоном

Код сделано до сих пор

Sub ConvertToHyperlink(MyMail As MailItem)
Dim strID As String
Dim Body As String
Dim objMail As Outlook.MailItem
Dim temp As String
Dim RegExpReplace As String
Dim RegX As Object
strID = MyMail.EntryID

Set objMail = Application.Session.GetItemFromID(strID)
Body = objMail.Body
Body = Body + "Test"
objMail.Body = Body

Set RegX = CreateObject("VBScript.RegExp")
With RegX
.Pattern = "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
.Global = True
.IgnoreCase = Not MatchCase
End With
RegExpReplace = RegX.Replace(Body, "http://www.code.com/ABCD")

Set RegX = Nothing
objMail.Body = RegExpReplace
objMail.Save
Set objMail = Nothing
End Sub

Этот код заменяет только весь идентификатор. Как добавить идентификатор в гиперссылку. и после добавления мне нужна встроенная гиперссылка.

спасибо


Хорошо, моя измененная идея ниже ...

Привет ..

Я столкнулся с двумя проблемами в процессе, описанном ниже ..

Преобразование указанного текста, извлеченного из почтового элемента Outlook, в гиперссылки в текстовом документе и сохранение его в почтовом элементе Outlook.

i.e Входящая электронная почта -> Сохранить ее в документе Word -> Изменить текст на гиперссылки-> Сохранить измененный документ WORD в почтовый элемент Outlook

  1. Мой код находит только первый встречающийся текст в документе, заменяет его гиперссылкой и оставляет другие вхождения

  2. После внесения изменений в текстовый документ я хочу скопировать содержимое документа в почтовый элемент outlook.

  3. Форматирование теряется, если в электронной почте есть таблицы и прочее.

Мой код здесь для вас ...

Sub IncomingHyperlink(MyMail As MailItem)
  Dim strID As String
  Dim Body As String
  Dim objMail As Outlook.MailItem
  Dim temp As String
  Dim RegExpReplace As String
  Dim RegX As Object
  Dim myObject As Object
  Dim myDoc As Word.Document
  Dim mySelection As Word.Selection

  strID = MyMail.EntryID
  Set objMail = Application.Session.GetItemFromID(strID)

  Set objWord = CreateObject("Word.Application")
  objWord.Visible = True

  Set objDoc = objWord.Documents.Add()
  Set objSelection = objWord.Selection
  objSelection.TypeText "GOOD" & objMail.Body

  With objSelection.Find
    .ClearFormatting
    .Text = "ASA[a-z][a-z][0-9][0-9][0-9][0-9][0-9]"
    .Forward = True
    .Wrap = wdFindAsk
    .MatchWildcards = True
  End With
  'Find next instance of Pattern "ASA[a-z][a-z][0-9][0-9][0-9][0-9]"
  objSelection.Find.Execute

  'Replace it with a hyperlink
  objSelection.Hyperlinks.Add Anchor:=objSelection.Range, _
  Address:="http://www.code.com/" & objSelection.Text, _
  TextToDisplay:=objSelection.Text

  objDoc.SaveAs ("C:\Desktop\testdoc.doc")
  objWord.Quit

  objMail.Body = objSelection.Paste
  objMail.Save
  Set objMail = Nothing
End Sub

Не могли бы вы помочь решить эти две проблемы?

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Хорошо, я думаю, что понимаю вас сейчас.Вы хотите использовать именованные группы.

Начните с этого шаблона регулярного выражения:

(?<key>ASA\d{3}[a-z]{2})

Затем используйте его для шаблона замены:

<a href=http://code.com${key}/example>${key}</a>

- Дэйв

0 голосов
/ 19 июня 2011

Предложение: просто используйте встроенный в Word метод Find.

'Set up search
With Selection.Find
    .ClearFormatting
    .Text = "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
    .Forward = True
    .Wrap = wdFindAsk
    .MatchWildcards = True
End With

' Find next instance of Pattern "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
Selection.Find.Execute

' Replace it with a hyperlink
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
    Address:="http://www.code.com/" & Selection.Text, _
    TextToDisplay:=Selection.Text

Приведенное выше сохранит оригинальный текст, например, "ASA5534yy", и вставит гиперссылку http://www.code.com/ASA5534yy (отрегулируйте по своему усмотрению).

...