Как я могу найти и заменить несколько файлов Word?

10

Я ищу способ поиска и замены во многих файлах Word (.doc) (с целью автоматизации процесса).

Программное обеспечение, которое я нашел до сих пор, позволяет мне только искать, но не заменять.

Как я могу сделать это с Word?

Таль Галили
источник

Ответы:

7

Вы можете попробовать VBA Find & Replace (кэшированная ссылка).

VBA Find and Replace © предоставляет метод для поиска и замены текста в любом месте документа (или коллекции документов) с использованием однопользовательских пар переменных «найти» и «заменить» или определенного пользователем списка «найти» и «заменить». пар. Он также предоставляет метод поиска текста и замены найденного текста пользовательской записью «Автотекст» или «Строительный блок».

Джей Вик
источник
Это выглядит так же, как я хотел - ты рок!
Тал Галили
Какие файлы этот плагин ищет? Я не могу найти возможность указать начальный каталог. Использует ли он только все открытые файлы? И как мне просто искать без замены?
Майкл С.
2
@gentlesea не помогает настройка «Обработка файлов в пакетной папке»?
Джей Вик,
1
В конце этого URL есть дополнительный период - я бы удалил его, но StackOverflow спроектирован неверно и предотвращает это: gregmaxey.mvps.org/VBA_Find_And_Replace.htm
Крис Адамс,
1
спасибо, очень ценю это. (:
p._phidot_
0

В целях выполнения нескольких обычных и подстановочных замен в нескольких файлах MS Word, расположенных в нескольких папках в данной корневой папке, я создал следующий макрос VBA. Чтобы использовать его, вы должны изменить содержимое следующих переменных (констант):

  • rootPath : корневая папка, в которой находятся папки, содержащие документы Word.
  • findTextsWild и replaceTextsWild : массив подстановочных знаков на основе поиска и замены.
  • findTexts и replaceTexts : массив нормальных выражений поиска и замены.

Может быть, вы найдете это полезным :-)

Sub GlobalTextReplacement()
' Root under which all manuals are stored
Dim rootPath As String
rootPath = "c:\Data\Manuals\"

' Find and replace text for wildcard replacement. Performed first.
Dim findTextsWild() As Variant, replaceTextsWild() As Variant
findTextsWild = Array("[ ]{2;}", "[cC]onfiguration[/ ]@[pP]olicy [rR]epository", "[sS]ervlet[- ]@[fF]ilter")
replaceTextsWild = Array(" ", "Configuration/Policy Repository", "Servlet-Filter")

' Find and replace text for normal case insensitive replacement. Performed second.
Dim findTexts() As Variant, replaceTexts() As Variant
findTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "servletfilter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p ", " ^p")
replaceTexts = Array("DirX Access", "Policy Repository", "User Repository", "Servlet", "Servlet-Filter", "SAML assertion", "DirX Access Server", "DirX Access Manager", "Deployment Manager", "Policy Manager", "Client SDK", "^p", "^p")

' Main code
Application.ScreenUpdating = False

Dim dirNames(20) As String
Dim dirNamesCount As Integer
dirNamesCount = 0

Dim dirName As String
dirName = Dir$(rootPath & "*", vbDirectory)
Do Until LenB(dirName) = 0
    Dim dirPath As String
    dirPath = rootPath & dirName
    If ((GetAttr(dirPath) And vbDirectory) = vbDirectory) And (dirName <> ".") And (dirName <> "..") Then
        dirNamesCount = dirNamesCount + 1
        dirNames(dirNamesCount) = dirPath & "\"
    End If
    dirName = Dir$
Loop

Do While dirNamesCount > 0
    Dim fileName As String
    dirName = dirNames(dirNamesCount)
    dirNamesCount = dirNamesCount - 1
    fileName = Dir$(dirName & "*.doc", vbDirectory)
    Do Until LenB(fileName) = 0
        Dim filePath As String
        filePath = dirName & fileName
        fileName = Dir$

        Dim document As document
        Set document = Documents.Open(filePath)
        document.TrackRevisions = True

        document.Select

        Dim i As Integer, maxIndex As Integer
        maxIndex = UBound(findTextsWild)
        For i = LBound(findTextsWild) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTextsWild(i)
                .Replacement.Text = replaceTextsWild(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchWildcards:=True
            End With
        Next

        maxIndex = UBound(findTexts)
        For i = LBound(findTexts) To maxIndex
            With Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = findTexts(i)
                .Replacement.Text = replaceTexts(i)
                .Execute Replace:=wdReplaceAll, Forward:=True, _
                    Wrap:=wdFindContinue, MatchCase:=False, MatchWildcards:=False
            End With
        Next

        document.Save
        document.Close
    Loop
Loop

Application.ScreenUpdating = True
End Sub
максвелл
источник
-1

Разве это не может быть сделано в самом Microsoft Word?

Его в меню «Правка» (Word 2003) или на вкладке «Главная» / «Редактирование» (Word 2007)

http://office.microsoft.com/en-us/word/HA012303921033.aspx

shrmn
источник
Только что увидел ваш комментарий на пост tombull89. Для Word 2003 вы можете следовать этим инструкциям: office.microsoft.com/en-us/word/HP051894331033.aspx
shrmn
1
обе ссылки сейчас мертвы
Борис Калленс
-1

Если вы не являетесь владельцем Microsoft Word и ищете бесплатную альтернативу, которая поможет вам, попробуйте OpenOffice.org .

Я не думаю, что это поможет вам, если вы ищете способ автоматизировать этот процесс.

Даг Харрис
источник
-1

Notepad ++ способен сделать это с помощью «Найти в файлах»

zeyrkelian
источник
Сочетание клавиш Ctrl + Shift + F
Ицхак
2
Notepad ++ может открывать документы Microsoft Word?
Даниэль Бек
1
Это МОЖЕТ работать, если совпадение строк и замена строк не являются специальными символами, поскольку документы Word 2007+ на самом деле являются файлами XML по своей природе. Но я сказал, что может. Вы хотели проверить это перед публикацией в качестве ответа.
тумчаадитья
-2
Option Explicit

Public Sub BatchReplaceAll()
    Dim FirstLoop As Boolean
    Dim myFile As String
    Dim PathToUse As String
    Dim myDoc As Document
    Dim Response As Long

    PathToUse = ActiveDocument.Path
    On Error Resume Next
    Documents.Close SaveChanges:=wdPromptToSaveChanges
    FirstLoop = True
    myFile = Dir$(PathToUse & "\*.doc*")

    While myFile <> ""
        Set myDoc = Documents.Open(PathToUse & "\" & myFile)
        If FirstLoop Then
            Application.Dialogs(wdDialogEditReplace).Show
            FirstLoop = False

            Response = MsgBox("Do you want to process the rest of the files in this folder", vbYesNo)
            If Response = vbNo Then Exit Sub
        Else
            With Dialogs(wdDialogEditReplace)
                .ReplaceAll = 1
                .Execute
            End With
        End If
        myDoc.Close SaveChanges:=wdSaveChanges
        myFile = Dir$()
    Wend
End Sub
Avadhani
источник
3
Что это за блок кода, что он делает и как он может помочь решить эту проблему?