1 (изменено: uniksist, 2012-04-23 09:33:30)

Тема: VBScript: Поиск и замена текста по шаблону в файлах Word

Есть вот такой скрипт на ВБС, который в разных вариантах можно найти в Сети:

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

Set objDoc = objWord.Documents.Open("C:\Scripts\Test.doc")
Set objSelection = objWord.Selection

objSelection.Find.Forward = True
objSelection.Find.MatchWildcards = True
objSelection.Find.Text = "\[\[*\]\]"

Do While True
    objSelection.Find.Execute
    If objSelection.Find.Found Then
        strWord = objSelection.Text
        strWord = Replace(strWord, "[[", "")
        strWord = Replace(strWord, "]]", "")
        Wscript.Echo strWord
    Else
        Exit Do
    End If
Loop

У меня этот скрипт работает некорректно. Строку поиска ищет и находит, находит даже шаблонное включение - это можно наблюдать при включённом

objWord.Visible = True

Но заменять шаблонное включение ни как не желает. Ошибок тоже не выдаёт. Тестирую скрипт на машине под ХР, Офис2003. В чём здесь может быть дело? У кого-нибудь работает эта конструкция?

ЗЫ. Кто будет тестировать - рекомендую в конце кода добавить:

objWord.Quit
Set objWord = Nothing

Иначе Ворд будет продолжать работать после завершения скрипта, а файл будет оставаться открытым в фоновом режиме.

2

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

uniksist, я вовсе не вижу в коде каких-либо операций замены. Поиск вижу, странный несколько, но вижу. Замены — нет.

Попробуйте так:

Option Explicit

Const wdReplaceAll = 2

With WScript.CreateObject("Word.Application")
    .Visible = False
    
    With .Documents.Open("C:\Scripts\Test.doc")
        If .Content.Find.Execute("\[\[(*)\]\]", , , True, , , , , , "\1", wdReplaceAll) Then
            .Save
        End If
        
        .Close
    End With
    
    .Quit
End With

WScript.Quit 0

3

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

alexii пишет:

uniksist, я вовсе не вижу в коде каких-либо операций замены. Поиск вижу, странный несколько, но вижу. Замены — нет.

Попробуйте так:

...

Спасибо, попробую по вашему.
Но, вообще удивлён, что в вышеописанном скрипте нет замены
Ведь код:

strWord = Replace(strWord, "...", "")

явная попытка заменить включение в строке. Может правда криво сооружено. А может дело в конкретной машине, на которой я тестрировал? - Сегодня попробую на другой, отпишусь.

4

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

uniksist, в строке strWord — да, замена. Но на само содержимое документа сие никак не влияет.

5 (изменено: uniksist, 2012-04-23 11:45:04)

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

alexii пишет:

uniksist, в строке strWord — да, замена. Но на само содержимое документа сие никак не влияет.

Alexii, спасибо, ваш вариант кода прекрасно работает
А вот вариант, вышеприведённый мной, не работает. Хотя там, где я взял этот код, приведена целая статья (на несколько страниц!) по функционированию этого незатейливого набора строчек с обещанием именно поиска и замены в результате И такой пшик на выхлопе... Хотя, по видимому, и в этом коде нужна лишь небольшая доработка для его работоспособности. Но, увы, ВБС знаю не очень, так что пока воспользуюсь вашим кодом. А там, уж когда-нибудь разберусь и доработаю для альтернативы и вышеприведённый код.

6

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

Хотя там, где я взял этот код, приведена целая статья (на несколько страниц!)…

uniksist, а приведите ссылку.

7 (изменено: uniksist, 2012-04-23 18:05:51)

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

alexii пишет:

Хотя там, где я взял этот код, приведена целая статья (на несколько страниц!)…

uniksist, а приведите ссылку.

А я её наоборот убрал, посчитав, что она оказалась в обсуждении бесполезной, а для форума какой-никакой, а балласт.
Ну, раз так, то вот эта статья: How Can I Search a Word Document for All the Words in Double Brackets? - Hey, Scripting Guy! Blog - Site Home - TechNet Blogs.

8

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

uniksist, в статье-то как раз всё верно. Там решается иная задача: найти текст в документе Word внутри двойных квадратных скобок. Метод использован, как я уже писал выше, несколько странный. Но речи о замене текста в той статье не ведётся. «Replace()» использован только для того, чтобы вослед использованному методу поиска удалить из найденного обрамляющие двойные скобки.

9 (изменено: uniksist, 2012-04-24 09:51:45)

Re: VBScript: Поиск и замена текста по шаблону в файлах Word

alexii пишет:

uniksist, в статье-то как раз всё верно. Там решается иная задача: найти текст в документе Word внутри двойных квадратных скобок. Метод использован, как я уже писал выше, несколько странный. Но речи о замене текста в той статье не ведётся. «Replace()» использован только для того, чтобы вослед использованному методу поиска удалить из найденного обрамляющие двойные скобки.

Ну, тогда значит я невнимательно читал