我希望从Excel文件中的宏打开一个.docx文件,在该文件中查找字符串的所有实例,然后用另一个字符串替换该字符串。
我可以找到并打开文件。我不知道字符串是否已被替换,因为下面的代码破坏了文件。 Word不能再打开该文件。
这是宏的代码:
Dim objFSO
Dim objTS 'define a TextStream object
Const ForReading = 1
Const ForWriting = 2
Const TristateUseDefault = -2
Dim strContents As String
Dim fileSpec As String
Sub SearchAndReplaceTextInFile()
fileSpec = "C:\some\path\to\file\location\file.docx"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(fileSpec, ForReading, TristateUseDefault)
strContents = objTS.ReadAll
strContents = Replace(strContents, "adress", "address")
Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting, TristateUseDefault)
objTS.Write strContents
objTS.Close
End Sub
答案 0 :(得分:2)
OpenTextFile
仅支持两种iomode
和ForReading
模式。要替换文本文件中的文本,请使用ForAppending
并将CreateTextFile
设置为overwrite
。
True
Dim objFSO
Dim objTS 'define a TextStream object
Const ForReading = 1
Const ForWriting = 2
Const TristateUseDefault = -2
Dim strContents As String
Dim fileSpec As String
Sub SearchAndReplaceTextInFile()
fileSpec = "C:\Users\best buy\Documents\EBirdRegionalRequest.txt" '"C:\some\path\to\file\location\file.docx"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(Filename:=fileSpec, iomode:=ForReading, Format:=TristateUseDefault)
strContents = objTS.ReadAll
strContents = Replace(strContents, "adress", "address")
Set objTS = objFSO.CreateTextFile(Filename:=fileSpec, overwrite:=True)
objTS.Write strContents
objTS.Close
Debug.Print objFSO.OpenTextFile(Filename:=fileSpec, iomode:=ForReading, Format:=TristateUseDefault).ReadAll
End Sub
您不能使用Sub SearchAndReplaceTextWordDoc(fileSpec As String, Find As String, Replace As String)
Const wdReplaceAll As Long = 2
Const wdFindContinue = 1
Dim wdRange As Variant
Dim doc As Object, wdApp As Object
Set wdApp = CreateObject("Word.Application")
Set doc = wdApp.Documents.Open(Filename:=fileSpec, ReadOnly:=False)
For Each wdRange In doc.StoryRanges
With wdRange.Find
.Text = Find
.Replacement.Text = Replace
.Wrap = wdFindContinue
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Highlight = False
.Execute Replace:=wdReplaceAll
End With
Next
wdApp.Visible = True
doc.Close SaveChanges:=True
wdApp.Quit
End Sub
来修改Office文档。 Office文档实际上是Zip文件。如果将FileSystemObject
或docx
的文件扩展名更改为zip并打开,则会看到多个文件夹。这些文件夹中包含清单,元数据和xml文件。