Bagaimana saya bisa mencari dan mengganti dalam banyak file Word?

10

Saya mencari cara untuk melakukan pencarian dan mengganti banyak file Word (.doc) (untuk tujuan otomatisasi proses).

Perangkat lunak yang saya temukan sejauh ini hanya memungkinkan saya untuk mencari, tetapi tidak menggantikan.

Bagaimana saya bisa melakukannya dengan Word?

Tal Galili
sumber

Jawaban:

7

Anda bisa mencoba VBA Find & Replace (tautan dalam tembolok).

VBA Find and Replace © menyediakan metode untuk menemukan dan mengganti teks di mana saja dalam dokumen (atau kumpulan dokumen) menggunakan pasangan variabel "find" dan "replace" yang ditetapkan pengguna, atau daftar "find" dan "replace" yang ditentukan pengguna. berpasangan. Ini juga menyediakan metode untuk menemukan teks dan mengganti teks yang ditemukan dengan entri "AutoText" atau "Building Block" yang ditentukan pengguna.

Jay Wick
sumber
Ini terlihat seperti apa yang saya inginkan - Kamu rock!
Tal Galili
File mana yang dicari plugin ini? Saya tidak dapat menemukan kemungkinan untuk menentukan direktori awal. Apakah hanya menggunakan semua file yang terbuka? Dan bagaimana cara saya mencari tanpa mengganti?
Michael S.
2
@ gentlesea tidak pengaturan 'Proses File di Folder Batch' tidak membantu?
Jay Wick
1
Ada periode tambahan di akhir URL itu - saya akan menghapusnya tetapi StackOverflow dirancang secara salah dan mencegahnya: gregmaxey.mvps.org/VBA_Find_And_Replace.htm
Chris Adams
1
terima kasih, sangat menghargainya. (:
p._phidot_
0

Untuk tujuan menjalankan beberapa penggantian berbasis normal dan wildcard di beberapa file MS Word yang terletak di beberapa folder di bawah folder root yang diberikan, saya telah membuat makro VBA berikut. Untuk menggunakannya, Anda harus mengubah konten variabel berikut (konstanta):

  • rootPath : folder root di mana berada folder yang berisi dokumen Word.
  • findTextsWild dan replaceTextsWild : array mencari berbasis wildcard dan mengganti ekspresi.
  • findTexts dan replaceTexts : array find normal dan ganti ekspresi.

Mungkin Anda akan merasakan manfaatnya :-)

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
Maxwell
sumber
-1

Jika Anda tidak memiliki Microsoft Word dan sedang mencari alternatif gratis yang akan membantu Anda, cobalah OpenOffice.org .

Saya tidak berpikir ini akan membantu Anda jika Anda sedang mencari cara untuk mengotomatisasi proses ini.

Doug Harris
sumber
-1

Notepad ++ Dapat melakukannya menggunakan "Temukan di File"

zeyrkelian
sumber
Pintasan keyboard Ctrl + Shift + F
Yitzchak
2
Notepad ++ dapat membuka dokumen Microsoft Word?
Daniel Beck
1
Jika ini bisa berfungsi, jika string yang cocok dan string pengganti bukan karakter khusus karena dokumen Word 2007+ sebenarnya adalah file XML. Tapi saya katakan mungkin. Sudahkah Anda peduli untuk menguji ini sebelum memposting sebagai jawaban.
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
Avadhani
sumber
3
Apa blok kode ini, apa fungsinya, dan bagaimana itu bisa membantu menyelesaikan masalah ini?