ฉันจะค้นหาและแทนที่ในไฟล์ Word หลายไฟล์ได้อย่างไร


10

ฉันกำลังมองหาวิธีที่จะทำการค้นหาและแทนที่ในไฟล์ Word (.doc) หลายไฟล์ (เพื่อวัตถุประสงค์ในการทำให้เป็นอัตโนมัติของกระบวนการ)

ซอฟต์แวร์ที่ฉันพบจนถึงตอนนี้อนุญาตให้ฉันค้นหา แต่ไม่สามารถแทนที่

ฉันจะทำเช่นนั้นกับ Word ได้อย่างไร

คำตอบ:


7

คุณสามารถลองใช้VBA ค้นหา & แทนที่ (ลิงก์แคช)

VBA ค้นหาและแทนที่©มีวิธีการค้นหาและแทนที่ข้อความที่ใดก็ได้ในเอกสาร (หรือชุดของเอกสาร) โดยใช้ผู้ใช้เดี่ยวที่กำหนด "ค้นหา" และ "แทนที่" ตัวแปรคู่หรือผู้ใช้กำหนดรายการของ "ค้นหา" และ "แทนที่" คู่ นอกจากนี้ยังมีวิธีการค้นหาข้อความและแทนที่ข้อความที่พบด้วยรายการ "AutoText" หรือ "Building Block" ที่ผู้ใช้กำหนด


ดูเหมือนว่าสิ่งที่ฉันต้องการ - You rock!
Tal Galili

ปลั๊กอินนี้ค้นหาไฟล์อะไร ฉันไม่พบความเป็นไปได้ที่จะระบุไดเรกทอรีเริ่มต้น มันใช้ไฟล์ที่เปิดทั้งหมดเท่านั้นหรือไม่ และฉันจะค้นหาโดยไม่ต้องเปลี่ยนได้อย่างไร
Michael S.

2
@gentlesea การตั้งค่า 'ประมวลผลไฟล์ในโฟลเดอร์แบทช์' ไม่ช่วยหรือไม่
Jay Wick

1
มีระยะเวลาเพิ่มเติมที่ส่วนท้ายของ URL นั้น - ฉันจะลบออก แต่ StackOverflow ได้รับการออกแบบอย่างไม่ถูกต้องและป้องกันไม่ให้: gregmaxey.mvps.org/VBA_Find_And_Replace.htm
Chris Adams

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


เพิ่งเห็นความคิดเห็นของคุณในโพสต์ของ tombull89 สำหรับ word 2003 คุณสามารถทำตามคำแนะนำเหล่านี้: office.microsoft.com/en-us/word/HP051894331033.aspx
shrmn

1
ลิงก์ทั้งสองตอนนี้ตายแล้ว
Boris Callens

-1

หากคุณไม่ได้เป็นเจ้าของ Microsoft Word และกำลังมองหาทางเลือกที่จะช่วยให้คุณลองOpenOffice.org

ฉันไม่คิดว่าจะช่วยคุณได้หากคุณกำลังมองหาวิธีที่จะทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติ


-1

Notepad ++ สามารถทำได้โดยใช้ "ค้นหาในไฟล์"


แป้นพิมพ์ลัด Ctrl + Shift + F
Yitzchak

2
Notepad ++ สามารถเปิดเอกสาร Microsoft Word ได้หรือไม่
Daniel Beck

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
รหัสของบล็อกนี้คืออะไรมันทำอะไรและมันจะช่วยแก้ปัญหานี้ได้อย่างไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.