Як я можу шукати та замінювати кілька файлів Word?


10

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

Програмне забезпечення, яке я знайшов поки що, дозволяє лише шукати, але не замінювати.

Як я можу це зробити зі Word?

Відповіді:


7

Ви можете спробувати знайти і замінити VBA (кешоване посилання).

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 та substituTextsWild : масив виразних знаків на основі пошуку та заміни.
  • findTexts та substituTexts : масив звичайних виразів знаходження та заміни.

Можливо, ви знайдете це корисним :-)

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


Щойно побачив ваш коментар до повідомлення tombull89. Для слова 2003 можна дотримуватися цих інструкцій: office.microsoft.com/en-us/word/HP051894331033.aspx
shrmn

1
обидва посилання зараз мертві
Борис Калленс

-1

Якщо ви не є власником Microsoft Word і шукаєте безкоштовну альтернативу, яка допоможе вам, спробуйте OpenOffice.org .

Я не думаю, що це допоможе вам, якщо ви шукаєте спосіб автоматизації цього процесу.


-1

Блокнот ++ може це зробити за допомогою "Знайти у файлах"


Комбінація клавіш Ctrl + Shift + F
Іцчак

2
Блокнот ++ може відкрити документи Microsoft Word?
Даніель Бек

1
Ця МОЖНА робота, якщо рядок відповідності та рядок заміни не є спеціальними символами, оскільки документи Word 2007+ за своєю суттю є файлами XML. Але я сказав, що може. Чи потурбувались ви перевірити це перед тим, як опублікувати як відповідь.
tumchaaditya

-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

3
Що таке цей блок коду, що він робить і як він може допомогти вирішити цю проблему?
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.