Nano Hash - криптовалюты, майнинг, программирование

vbscript: заменить текст в активном документе гиперссылкой

Приступая к новой работе, мне приходится просматривать кучу документов, которые оставил мой предшественник. Это файлы MS Word, содержащие информацию о нескольких сотнях патентов. Вместо того, чтобы копировать/вставлять каждый отдельный номер патента в онлайн-форму, я хотел бы заменить все номера патентов интерактивными гиперссылками. Я предполагаю, что это должно быть сделано с помощью vbscript (я не привык работать с MS Office).

У меня есть до сих пор:

<obsolete>

Это не работает для меня: 1. Мне (вероятно) нужно что-то добавить для цикла через ActiveDocument 2. Функция замены, вероятно, нуждается в строке, а не в объекте для параметра - есть ли __toString() в vbscript?

СПАСИБО!

ОБНОВЛЕНИЕ: у меня это частично работает (регулярное выражение и поиск совпадений) - теперь, если бы я только мог правильно установить якорь для метода hyperlink.add...

Sub HyperlinkPatentNumbers()
'
' HyperlinkPatentNumbers Macro
'

Dim objRegExp, Matches, match, myRange

Set myRange = ActiveDocument.Content

Set objRegExp = CreateObject("VBScript.RegExp")
With objRegExp
    .Global = True
    .IgnoreCase = False
    .Pattern = "(WO|EP|US)([0-9]*)(A1|A2|B1|B2)"
End With

Set Matches = objRegExp.Execute(myRange)

If Matches.Count >= 1 Then
    For Each match In Matches
        ActiveDocument.Hyperlinks.Add Anchor:=objRegExp.match, Address:="http://worldwide.espacenet.com/publicationDetails/biblio?DB=EPODOC&adjacent=true&locale=en_EP&CC=$1&NR=$2&KC=$3"
    Next
End If

Set Matches = Nothing
Set objRegExp = Nothing

End Sub
15.02.2013

Ответы:


1

Это VBA или VBScript? В VBScript вы не можете объявлять такие типы, как Dim newText As hyperLink, но каждая переменная является вариантом, поэтому: Dim newText и ничего больше.

objRegEx.Replace возвращает строку с заменами и требует передачи в нее двух параметров: исходной строки и текста, которым вы хотите заменить шаблон:

Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.IgnoreCase = False
objRegEx.Pattern = "^(WO|EP|US)([0-9]*)(A1|A2|B1|B2)$"

' assuming plainText contains the text you want to create the hyperlink for
strName = objRegEx.Replace(plainText, "$1$2$3")
strAddress = objRegex.Replace(plainText, "http://worldwide.espacenet.com/publicationDetails/biblio?DB=EPODOC&adjacent=true&locale=en_EP&CC=$1&NR=$2&KC=$3"

Теперь вы можете использовать strName и strAddress для создания гиперссылки с помощью.
Совет: вы можете использовать objRegEx.Test(plainText), чтобы увидеть, соответствует ли регулярное выражение чему-либо для ранней обработки ошибок.

15.02.2013
  • THX - Это не сработало из коробки, но я поискал немного дальше и обновил свой первый пост. Не могли бы вы взглянуть на это? 15.02.2013
  • VBScript не может обрабатывать именованные параметры, такие как Anchor:=foo. Попробуйте использовать нативную версию, в которой аргументы находятся в фиксированных местах: ActiveDocument.Hyperlinks.Add Anchor, Address, SubAddress, ScreenTip, TextToDisplay. 15.02.2013
  • К вашему сведению: If Matches.Count >= 1 Then не нужен, потому что, если совпадений нет, выполнение просто провалится через For Each match In Matches без обработки внутренних операторов. 15.02.2013

  • 2

    Задача решена:

    Sub addHyperlinkToNumbers()
    
    Dim objRegExp As Object
    Dim matchRange As Range
    Dim Matches
    Dim match
    
    Set objRegExp = CreateObject("VBScript.RegExp")
    
    With objRegExp
        .Global = True
        .IgnoreCase = False
        .Pattern = "(WO|EP|US|FR|DE|GB|NL)([0-9]+)(A1|A2|A3|A4|B1|B2|B3|B4)"
    End With
    
    Set Matches = objRegExp.Execute(ActiveDocument.Content)
    
    For Each match In Matches
        'This doesn't work, because of the WYSIWYG-model of MS Word:
        'Set matchRange = ActiveDocument.Range(match.FirstIndex, match.FirstIndex + Len(match.Value))
    
        Set matchRange = ActiveDocument.Content
        With matchRange.Find
            .Text = match.Value
            .MatchWholeWord = True
            .MatchCase = True
            .Wrap = wdFindStop
            .Execute
        End With
    
        ActiveDocument.Hyperlinks.Add Anchor:=matchRange, _
            Address:="http://worldwide.espacenet.com/publicationDetails/biblio?DB=EPODOC&adjacent=true&locale=en_EP&CC=" _
            & match.Submatches(0) & "&NR=" & match.Submatches(1) & "&KC=" & match.Submatches(2)
    
    Next
    
    MsgBox "Hyperlink added to " & Matches.Count & " patent numbers"
    
    Set objRegExp = Nothing
    Set matchRange = Nothing
    Set Matches = Nothing
    Set match = Nothing
    
    End Sub
    
    18.02.2013
  • На самом деле мне пришлось поработать над небольшой ошибкой в ​​части, где регулярное выражение выбирается в качестве диапазона. Я обновлю свой ответ, чтобы сделать его полным рабочим кодом. 18.02.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..